当前位置:首页>JavaScript>JavaScript教程>JavaScript教程

JavaScript教程

作者:微学网发布时间:2019-08-10 18:03:05

JavaScript产生的背景

1995年,网景凭借其导航浏览器成为网络时代初期最著名的第一代互联网公司。

因为Netscape想为静态HTML页面添加一些动态的结果,BrendanEich在两周内设计了JavaScript语言,没错,就是两周不到的时间。

为什么称为javascript?原因是Java语言当时很受欢迎,Netscape想借用Java的名声来推广它,但是事实上JavaScript与Java没有什么关系,除了它与Java的语法有些地方存在相似性。

ECMAScript

因为网景开发了JavaScript,一年后微软又模仿JavaScript开发了JScript,为了让JavaScript成为全球标准,几个公司联合ECMA(European Computer Manufacturers Association)组织定制了JavaScript语言的标准,被称为ECMAScript标准。

所以简单说来就是,ECMAScript是一种语言标准,而JavaScript是网景公司对ECMAScript标准的一种实现。

那为什么不直接把JavaScript定为标准呢?因为JavaScript是网景的注册商标。

不过大多数时候,我们还是用JavaScript这个词。如果你遇到ECMAScript这个词,简单把它替换为JavaScript就行了。

JavaScript版本

JavaScript语言是在10天时间内设计出来的,虽然语言的设计者水平非常NB,但谁也架不住“时间紧,任务重”,所以,JavaScript有很多设计缺陷,我们后面会慢慢讲到。

此外,由于JavaScript的标准——ECMAScript在不断发展,最新版ECMAScript 6标准(简称ES6)已经在2015年6月正式发布了,所以,讲到JavaScript的版本,实际上就是说它实现了ECMAScript标准的哪个版本。

由于浏览器在发布时就确定了JavaScript的版本,加上很多用户还在使用IE6这种古老的浏览器,这就导致你在写JavaScript的时候,要照顾一下老用户,不能一上来就用最新的ES6标准写,否则,老用户的浏览器是无法运行新版本的JavaScript代码的。

不过,JavaScript的核心语法并没有多大变化。ES6在原有的基础上新增了一些特性。

JavaScript的诞生

JavaScript 因为互联网而生,紧随着浏览器的出现而问世。回顾它的历史,就要从浏览器的历史密切相关。

恰缝那一年,Java 语言开始推向市场,Netscape 公司决定,脚本语言的语法要接近 Java,并且可以支持 Java 程序。1995 年,Netscape 公司雇佣了程序员 Brendan Eich 开发这种网页脚本语言。

Brendan Eich 有很强的函数式编程背景,同时有几门语言的功底,因此JavaScript中的函数十分突出的同时更是有各种语言的影子,看起来像是各种语言的“乱炖”。接下来我们看看乱炖的菜谱:

组成 原料
基本语法 C语言+Java语言
数据结构 Java语言
函数的用法 Schema语言+Awk语言
正则表达式 Perl语言
字符串和数组处理 Python语言

JavaScript的发布与标准

1995 年 12 月 4 日,Netscape 公司与 Sun 公司联合发布了 JavaScript 语言。

1996 年 3 月,Navigator 2.0 浏览器正式内置了 JavaScript 脚本语言。

1996 年 8 月,微软模仿 JavaScript 开发了一种相近的语言,取名为 Jscript。

1996 年 11 月,网景公司决定将 JavaScript 提交给国际标准化组织 ECMA,希望JavaScript 能够成为国际标准,以此抵抗微软。

1997 年 7 月,ECMA 组织发布 262 号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称为 ECMAScript。这个版本就是 ECMAScript 1.0 版。之所以不叫 JavaScript,一方面是由于商标的关系,Java 是 Sun 公司的商标,根据一份授权协议,只有 Netscape 公司可以合法地使用 JavaScript 这个名字,且 JavaScript已经被 Netscape 公司注册为商标,另一方面也是想体现这门语言的制定者是 ECMA,不是 Netscape,这样有利于保证这门语言的开放性和中立性。因此,ECMAScript 和JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现。在日常场合,这两个词是可以互换的。

1998 年 6 月,ECMAScript 2.0 版发布。

1999 年 12 月,ECMAScript 3.0 版发布,成为 JavaScript 的通行标准,得到了广泛支持。

什么是JavaScript

JavaScript 是一种轻量级的脚本语言。所谓“脚本语言”(script language),指的是它不具备开发操作系统的能力,而是只用来编写控制其他大型应用程序(比如浏览器)的“脚本”。

JavaScript 也是一种嵌入式(embedded)语言。它本身提供的核心语法不算很多,只能用来做一些数学和逻辑运算。JavaScript 本身不提供任何与 I/O(输入/输出)相关的 API,都要靠宿主环境(host)提供,所以 JavaScript 只合适嵌入更大型的应用程序环境,去调用宿主环境提供的底层 API。

目前,已经嵌入 JavaScript 的宿主环境有多种,最常见的环境就是浏览器,另外还有服务器环境,也就是 Node 项目。

从语法角度看,JavaScript 语言是一种“对象模型”语言。各种宿主环境通过这个模型,描述自己的功能和操作接口,从而通过 JavaScript 控制这些功能。但是,JavaScript 并不是纯粹的“面向对象语言”,还支持其他编程范式(比如函数式编程)。这导致几乎任何一个问题,JavaScript 都有多种解决方法。阅读本书的过程中,你会诧异于 JavaScript 语法的灵活性。

JavaScript 的核心语法部分相当精简,只包括两个部分:基本的语法构造(比如操作符、控制结构、语句)和标准库(就是一系列具有各种功能的对象比如Array、Date、Math等)。除此之外,各种宿主环境提供额外的 API(即只能在该环境使用的接口),以便 JavaScript 调用。以浏览器为例,它提供的额外 API 可以分成三大类。

  • 浏览器控制类:操作浏览器

  • DOM 类:操作网页的各种元素

  • Web 类:实现互联网的各种功能

如果宿主环境是服务器,则会提供各种操作系统的 API,比如文件操作 API、网络通信 API等等。这些你都可以在 Node 环境中找到。

JavaScript组成部分

JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的。

  • ECMAScript,描述了该语言的语法和基本对象。

  • 文档对象模型(DOM),描述处理网页内容的方法和接口。

  • 浏览器对象模型(BOM),描述与浏览器进行交互的方法和接口。

JavaScript组成

JavaScript日常用途

  • 嵌入动态文本于HTML页面。

  • 对浏览器事件做出响应。

  • 读写HTML元素。

  • 在数据被提交到服务器之前验证数据。

  • 检测访客的浏览器信息。

  • 控制cookies,包括创建和修改等。

  • 基于Node.js技术进行服务器端编程

JavaScript语言排行

2008~2018 年编程语言排行榜,力压Java、Python、PHP、Ruby
JavaScript流行度

JavaScript社区活跃

  • ECMAScript打破多年的沉寂,每年都会给我们带来新的特性,像async函数这种语法为开发者减少了大量冗余的代码;

  • JS大家庭的其他成员也都在进步,从前端到后端,从底层的JS引擎到上层的NPM库,而大家热爱的Vue正在重写3.0;

  • 就连古老的编辑器也能带来新的惊喜,Visual Studio Code超越各种其实还不错的竞品,成为最受JSer欢迎的IDE;

  • Microsoft终于放弃了倒腾与众不同的浏览器,选择加入Chromium阵营,未来大家终于可以少纠结一点兼容问题了……

  • Node 10在4月发布并且在10月成为LTS,即长期支持版本

  • 强大的V8引擎已经发布10周年了,它的命名灵感来自超级性能车的V8引擎,果然名副其实!

  • 三大框架Vue.jsReactAngularJS飞速发展

为什么要学习JavaScript教程

别无选择,一家独大

  • 只有 JavaScript 可以控制所有常用的浏览器,而且 JavaScript 是世界上最重要的编程语言之一,学习 web 技术必须学会 JavaScript。

  • JavaScript 毫无疑问是 Web 开发的核心。更确切地说,它是最流行的脚本语言。全球超过 94% 的网站使用 JS。

  • 目前,全世界大部分网页都使用 JavaScript。
    如果不用,网站的易用性和使用效率将大打折扣,无法成为操作便利、对用户友好的网站。
    对于一个互联网开发者来说,如果你想提供漂亮的网页、令用户满意的上网体验、各种基于浏览器的便捷功能、前后端之间紧密高效的联系,JavaScript 是必不可少的工具。因此,如果你想成为一名 web 开发人员,那应该从学习 JS 开始。

JavaScript 是一种优美的语言,它很好,我们要学

  • JavaScript 是一门轻量级的脚本语言,不需要编译,由 JavaScript 解析引擎解析运行(一般指浏览器,当然不排除 node 之类的解析器);

  • JavaScript 拥有非函数式语言特性、函数式语言特性和动态语言特性,它的语法非常灵活;

  • JavaScript 是一门面向对象的编程语言,在 JavaScript 界有一句话:万物皆对象。其继承是基于原型的继承JavaScript 语言有一些显著特点,使得它非常值得学习。它既适合当作学习编程的入门语言,也适合当作日常开发的工作语言。它是目前最有希望、前途最光明的计算机语;

JavaScript优点

JavaScript 语言有一些显著特点,使得它非常值得学习。它既适合作为学习编程的入门语言,也适合当作日常开发的工作语言。它是目前最有希望、前途最光明的计算机语言之一。

1. 操控浏览器的能力

JavaScript 的发明目的,就是作为浏览器的内置脚本语言,为网页开发者提供操控浏览器的能力。它是目前唯一一种通用的浏览器脚本语言,所有浏览器都支持。它可以让网页呈现各种特殊效果,为用户提供良好的互动体验。

目前,全世界几乎所有网页都使用 JavaScript。如果不用,网站的易用性和使用效率将大打折扣,无法成为操作便利、对用户友好的网站。

对于一个互联网开发者来说,如果你想提供漂亮的网页、令用户满意的上网体验、各种基于浏览器的便捷功能、前后端之间紧密高效的联系,JavaScript 是必不可少的工具。

2. 广泛的使用领域

近年来,JavaScript 的使用范围,慢慢超越了浏览器,正在向通用的系统语言发展。

(1)浏览器的平台化

随着 HTML5 的出现,浏览器本身的功能越来越强,不再仅仅能浏览网页,而是越来越像一个平台,JavaScript 因此得以调用许多系统功能,比如操作本地文件、操作图片、调用摄像头和麦克风等等。这使得 JavaScript 可以完成许多以前无法想象的事情。

(2)Node

Node 项目使得 JavaScript 可以用于开发服务器端的大型项目,网站的前后端都用 JavaScript 开发已经成为了现实。有些嵌入式平台(Raspberry Pi)能够安装 Node,于是 JavaScript 就能为这些平台开发应用程序。

(3)数据库操作

JavaScript 甚至也可以用来操作数据库。NoSQL 数据库这个概念,本身就是在 JSON(JavaScript Object Notation)格式的基础上诞生的,大部分 NoSQL 数据库允许 JavaScript 直接操作。基于 SQL 语言的开源数据库 PostgreSQL 支持 JavaScript 作为操作语言,可以部分取代 SQL 查询语言。

(4)移动平台开发

JavaScript 也正在成为手机应用的开发语言。一般来说,安卓平台使用 Java 语言开发,iOS 平台使用 Objective-C 或 Swift 语言开发。许多人正在努力,让 JavaScript 成为各个平台的通用开发语言。

PhoneGap 项目就是将 JavaScript 和 HTML5 打包在一个容器之中,使得它能同时在 iOS 和安卓上运行。Facebook 公司的 React Native 项目则是将 JavaScript 写的组件,编译成原生组件,从而使它们具备优秀的性能。

Mozilla 基金会的手机操作系统 Firefox OS,更是直接将 JavaScript 作为操作系统的平台语言,但是很可惜这个项目没有成功。

(5)内嵌脚本语言

越来越多的应用程序,将 JavaScript 作为内嵌的脚本语言,比如 Adobe 公司的著名 PDF 阅读器 Acrobat、Linux 桌面环境 GNOME 3。

(6)跨平台的桌面应用程序

Chromium OS、Windows 8 等操作系统直接支持 JavaScript 编写应用程序。Mozilla 的 Open Web Apps 项目、Google 的 Chrome App 项目、Github 的 Electron 项目、以及 TideSDK 项目,都可以用来编写运行于 Windows、Mac OS 和 Android 等多个桌面平台的程序,不依赖浏览器。

(7)预期

JavaScript 最终将能让你只用一种语言,就开发出适应不同平台(包括桌面端、服务器端、手机端)的程序。早在2013年9月的统计之中,JavaScript 就是当年 Github 上使用量排名第一的语言。

(8)Atwood 定律
著名程序员 Jeff Atwood 甚至提出了一条 “Atwood 定律”:

“所有可以用 JavaScript 编写的程序,最终都会出现 JavaScript 的版本。”(Any application that can be written in JavaScript will eventually be written in JavaScript.)

3. 易学性

相比学习其他语言,学习 JavaScript 有一些有利条件。

(1)学习环境无处不在

只要有浏览器,就能运行 JavaScript 程序;只要有文本编辑器,就能编写 JavaScript 程序。这意味着,几乎所有电脑都原生提供 JavaScript 学习环境,不用另行安装复杂的 IDE(集成开发环境)和编译器。

(2)简单性

相比其他脚本语言(比如 Python 或 Ruby),JavaScript 的语法相对简单一些,本身的语法特性并不是特别多。而且,那些语法中的复杂部分,也不是必需要学会。你完全可以只用简单命令,完成大部分的操作。

(3)与主流语言的相似性

JavaScript 的语法很类似 C/C++ 和 Java,如果学过这些语言(事实上大多数学校都教),JavaScript 的入门会非常容易。

必须说明的是,虽然核心语法不难,但是 JavaScript 的复杂性体现在另外两个方面。

首先,它涉及大量的外部 API。JavaScript 要发挥作用,必须与其他组件配合,这些外部组件五花八门,数量极其庞大,几乎涉及网络应用的各个方面,掌握它们绝非易事。

其次,JavaScript 语言有一些设计缺陷。某些地方相当不合理,另一些地方则会出现怪异的运行结果。学习 JavaScript,很大一部分时间是用来搞清楚哪些地方有陷阱。Douglas Crockford 写过一本有名的书,名字就叫《JavaScript: The Good Parts》,言下之意就是这门语言不好的地方很多,必须写一本书才能讲清楚。另外一些程序员则感到,为了更合理地编写 JavaScript 程序,就不能用 JavaScript 来写,而必须发明新的语言,比如 CoffeeScript、TypeScript、Dart 这些新语言的发明目的,多多少少都有这个因素。

尽管如此,目前看来,JavaScript 的地位还是无法动摇。加之,语言标准的快速进化,使得 JavaScript 功能日益增强,而语法缺陷和怪异之处得到了弥补。所以,JavaScript 还是值得学习,况且它的入门真的不难。

4. 强大的性能

JavaScript 的性能优势体现在以下方面。

(1)灵活的语法,表达力强

JavaScript 既支持类似 C 语言清晰的过程式编程,也支持灵活的函数式编程,可以用来写并发处理(concurrent)。这些语法特性已经被证明非常强大,可以用于许多场合,尤其适用异步编程。

JavaScript 的所有值都是对象,这为程序员提供了灵活性和便利性。因为你可以很方便地、按照需要随时创造数据结构,不用进行麻烦的预定义。

JavaScript 的标准还在快速进化中,并不断合理化,添加更适用的语法特性。

(2)支持编译运行

JavaScript 语言本身,虽然是一种解释型语言,但是在现代浏览器中,JavaScript 都是编译后运行。程序会被高度优化,运行效率接近二进制程序。而且,JavaScript 引擎正在快速发展,性能将越来越好。

此外,还有一种 WebAssembly 格式,它是 JavaScript 引擎的中间码格式,全部都是二进制代码。由于跳过了编译步骤,可以达到接近原生二进制代码的运行速度。各种语言(主要是 C 和 C++)通过编译成 WebAssembly,就可以在浏览器里面运行。

(3)事件驱动和非阻塞式设计

JavaScript 程序可以采用事件驱动(event-driven)和非阻塞式(non-blocking)设计,在服务器端适合高并发环境,普通的硬件就可以承受很大的访问量。

5. 开放性

JavaScript 是一种开放的语言。它的标准 ECMA-262 是 ISO 国际标准,写得非常详尽明确;该标准的主要实现(比如 V8 和 SpiderMonkey 引擎)都是开放的,而且质量很高。这保证了这门语言不属于任何公司或个人,不存在版权和专利的问题。

语言标准由 TC39 委员会负责制定,该委员会的运作是透明的,所有讨论都是开放的,会议记录都会对外公布。

不同公司的 JavaScript 运行环境,兼容性很好,程序不做调整或只做很小的调整,就能在所有浏览器上运行。

6. 社区支持和就业机会

全世界程序员都在使用 JavaScript,它有着极大的社区、广泛的文献和图书、丰富的代码资源。绝大部分你需要用到的功能,都有多个开源函数库可供选用。

作为项目负责人,你不难招聘到数量众多的 JavaScript 程序员;作为开发者,你也不难找到一份 JavaScript 的工作。