12
12
13
13
这方面,JavaScript 和 [ Java] ( http://en.wikipedia.org/wiki/Java ) 有很大的区别。
14
14
15
- ``` smart header="Why <u>Java</u>Script? "
15
+ ``` smart header="为什么叫 <u>Java</u>Script? "
16
16
JavaScript 在刚诞生的时候,它的名字叫 “LiveScript”。但是因为当时 Java 很流行,所以决定将一种新语言定位为 Java 的“弟弟”会有助于它的流行。
17
17
18
18
随着 JavaScript 的发展,它已经变成了一门独立的语言,同时也有了自己的语言规范 [ECMAScript](http://en.wikipedia.org/wiki/ECMAScript)。现在,它和 Java 之间没有任何关系。
@@ -24,11 +24,11 @@ JavaScript 在刚诞生的时候,它的名字叫 “LiveScript”。但是因
24
24
25
25
不同的引擎有不同的“代号”,例如:
26
26
27
- - [ V8] ( https://en.wikipedia.org/wiki/V8_(JavaScript_engine) ) -- Chrome 和 Opera 中的 JavaScript 引擎。
28
- - [ SpiderMonkey] ( https://en.wikipedia.org/wiki/SpiderMonkey ) -- Firefox 中的 JavaScript 引擎。
29
- - ... 还有其他一些代号,像“Trident”,“Chakra”用于不同版本的 IE,“ChakraCore”用于 Microsoft Edge,“Nitro”和“SquirrelFish”用于 Safari 等等。
27
+ - [ V8] ( https://en.wikipedia.org/wiki/V8_(JavaScript_engine) ) —— Chrome 和 Opera 中的 JavaScript 引擎。
28
+ - [ SpiderMonkey] ( https://en.wikipedia.org/wiki/SpiderMonkey ) —— Firefox 中的 JavaScript 引擎。
29
+ - …… 还有其他一些代号,像“Trident”,“Chakra”用于不同版本的 IE,“ChakraCore”用于 Microsoft Edge,“Nitro”和“SquirrelFish”用于 Safari, 等等。
30
30
31
- 上面这些名称很容易记忆,因为经常出现在网上开发者的文章中。我们也会用到这些名称。例如:某个新的功能,如果 JavaScript 引擎 V8 是支持的,那么我们可以认为这个功能大概能在 Chrome 和 Opera 中正常运行。
31
+ 上面这些名称很容易记忆,因为经常出现在网上开发者的文章中。我们也会用到这些名称。例如:某个新的功能,如果“ JavaScript 引擎 V8 是支持的” ,那么我们可以认为这个功能大概能在 Chrome 和 Opera 中正常运行。
32
32
33
33
``` smart header="引擎是如何工作的?"
34
34
@@ -41,11 +41,11 @@ JavaScript 在刚诞生的时候,它的名字叫 “LiveScript”。但是因
41
41
引擎会对流程中的每个阶段都进行优化。它甚至可以在运行时监视编译的脚本,分析数据流并根据这些对机器代码应用优化。最后,脚本会执行地非常快。
42
42
```
43
43
44
- ## 浏览器中的 JavaScript 能做什么 ?
44
+ ## 浏览器中的 JavaScript 能做什么?
45
45
46
46
现代的 JavaScript 是一种“安全”语言。它不提供对内存或 CPU 的底层访问,因为它最初是为浏览器创建的,不需要这些功能。
47
47
48
- JavaScript 的能力依赖于它执行的环境 。例如:[ Node.js] ( https://wikipedia.org/wiki/Node.js ) 允许 JavaScript 读写任意文件、执行网络请求等。
48
+ JavaScript 的能力很大程度上依赖于它执行的环境 。例如:[ Node.js] ( https://wikipedia.org/wiki/Node.js ) 允许 JavaScript 读写任意文件、执行网络请求等。
49
49
50
50
浏览器中的 JavaScript 可以做与网页操作、用户交互和 Web 服务器相关的所有事情。
51
51
@@ -65,21 +65,21 @@ JavaScript 的能力依赖于它执行的环境。例如:[Node.js](https://wik
65
65
66
66
- 网页中的 JavaScript 不能读、写、复制及执行用户磁盘上的文件或程序。它没有直接访问操作系统的功能。
67
67
68
- 现代浏览器允许 JavaScript 做一些文件相关的操作,但是这个操作是受到限制的。仅当用户使用某个特定的动作,JavaScript 才能操作这个文件。例如,把文件 “拖” 到浏览器中,或者通过 ` <input> ` 标签选择文件。
68
+ 现代浏览器允许 JavaScript 做一些文件相关的操作,但是这个操作是受到限制的。仅当用户使用某个特定的动作,JavaScript 才能操作这个文件。例如,把文件“拖”到浏览器中,或者通过 ` <input> ` 标签选择文件。
69
69
70
- JavaScript 有很多方式和照相机/麦克风或者其他设备进行交互,但是这些都需要提前获得用户的授权许可。所以,启用了 JavaScript 的网页可能不会偷偷地启动网络摄像头观察你 ,并把你的信息发送到[ 美国国家安全局] ( https://en.wikipedia.org/wiki/National_Security_Agency ) 。
71
- - 不同的浏览器标签页之间基本彼此不相关。有时候,也会有一些关系。例如,通过 JavaScript 打开另外一个新的标签页。但即使在这种情况下,如果两个标签页打开的不是同一个网站(域名、协议或者端口任一不相同的网站),他们都不能够相互通信。
70
+ JavaScript 有很多方式和照相机/麦克风或者其他设备进行交互,但是这些都需要提前获得用户的授权许可。所以,启用了 JavaScript 的网页应该不会偷偷地启动网络摄像头观察你 ,并把你的信息发送到[ 美国国家安全局] ( https://en.wikipedia.org/wiki/National_Security_Agency ) 。
71
+ - 不同的浏览器标签页之间基本彼此不相关。有时候,也会有一些关系。例如,一个标签页通过 JavaScript 打开另外一个新的标签页。但即使在这种情况下,如果两个标签页打开的不是同一个网站(域名、协议或者端口任一不相同的网站),他们都不能够相互通信。
72
72
73
- 这就是“同源策略”。为了解决不同标签页交互的问题,两个同源的网站必须 ** 都** 包含一些特殊的 JavaScript 代码,才能够实现数据交换 。
73
+ 这就是“同源策略”。为了解决“同源策略”问题,两个标签页必须 ** 都** 包含一些处理这个问题的特殊的 JavaScript 代码,并均允许数据交换,这样才能够实现两个同源标签页的数据交换。本教程会讲到这部分相关的知识 。
74
74
75
- 这个限制也是为了用户的信息安全。例如,用户打开的 ` http://anysite.com ` 网页的 JavaScript 不能访问 ` http://gmail.com ` (另外一个标签页打开的网页)也不能从那里窃取信息。
76
- - JavaScript 通过互联网可以轻松地和服务器(当前网页域名的服务器)通讯 。但是从其他网站/域的服务器中获取数据的能力是受限的,需要服务器 (在 HTTP 头中)添加某些参数 。这也是为了用户的数据安全。
75
+ 这个限制也是为了用户的信息安全。例如,用户打开的 ` http://anysite.com ` 网页的 JavaScript 肯定不能访问 ` http://gmail.com ` (另外一个标签页打开的网页)也不能从那里窃取信息。
76
+ - JavaScript 通过互联网可以轻松地和当前网页域名的服务器进行通讯 。但是从其他网站/域名的服务器中获取数据的能力是受限的。尽管这可以实现,但是需要来自远程服务器的明确协议 (在 HTTP 头中)。这也是为了用户的数据安全。
77
77
78
78
![ ] ( limitations.svg )
79
79
80
- 浏览器环境外的 JavaScript 一般没有这些限制。例如服务端的 JavaScript 就没有这些限制。现代浏览器还允许通过 JavaScript 来安装浏览器插件或扩展,当然这也是在用户授权的前提下 。
80
+ 浏览器环境外的 JavaScript 一般没有这些限制。例如服务端的 JavaScript 就没有这些限制。现代浏览器还允许安装可能会要求扩展权限的插件或扩展 。
81
81
82
- ## JavaScript 为什么与众不同 ?
82
+ ## 是什么使得 JavaScript 与众不同 ?
83
83
84
84
至少有 ** 3** 件事值得一提:
85
85
@@ -88,35 +88,33 @@ JavaScript 的能力依赖于它执行的环境。例如:[Node.js](https://wik
88
88
+ 使用简单的工具完成简单的任务。
89
89
+ 被所有的主流浏览器支持,并且默认开启。
90
90
```
91
-
92
91
满足这三条的浏览器技术也只有 JavaScript 了。
93
92
94
93
这就是为什么 JavaScript 与众不同!这也是为什么它是创建浏览器界面的最普遍的工具。
95
94
96
- 当然,学习一项新技术的时候,最好先看一下它的前景。所以,接下来我们继续讨论包括新语言和浏览器功能在内的现代趋势。
97
-
95
+ 此外,JavaScript 还支持创建服务器,移动端应用程序等。
98
96
99
- ## 比 JavaScript “好” 的语言
97
+ ## 比 JavaScript “更好” 的语言
100
98
101
- 不同的人喜欢不同的功能,JavaScript 的语法也不能够满足所有人 。
99
+ 不同的人喜欢不同的功能,JavaScript 的语法也不能够满足所有人的需求 。
102
100
103
101
这是正常的,因为每个人的项目和需求都不一样。
104
102
105
103
所以,最近出现了很多不同的语言,这些语言在浏览器中执行之前,都会被** 编译** (转化)成 JavaScript。
106
104
107
- 现代化的工具使得编译速度非常快速和透明 ,实际上允许开发人员使用另一种语言编写代码并将其自动转换为 JavaScript。
105
+ 现代化的工具使得编译速度非常快速且透明 ,实际上允许开发人员使用另一种语言编写代码并将其自动转换为 JavaScript。
108
106
109
- 这些语言的例子有 :
107
+ 这些编程语言的例子有 :
110
108
111
109
- [ CoffeeScript] ( http://coffeescript.org/ ) 是 JavaScript 的语法糖,它语法简短,明确简洁。通常使用 Ruby 的人喜欢用。
112
110
- [ TypeScript] ( http://www.typescriptlang.org/ ) 将注意力集中在增加严格的数据类型。这样就能简化开发,也能用于开发复杂的系统。TypeScript 是微软开发的。
113
111
- [ Flow] ( http://flow.org/ ) 也添加了数据类型,但是以一种不同的方式。由 Facebook 开发。
114
- - [ Dart] ( https://www.dartlang.org/ ) 是一门独立的语言。它拥有自己的引擎用于在非浏览器环境中运行(如:在手机应用中运行 ),它也能被编译成 JavaScript 。由 Google 开发。
112
+ - [ Dart] ( https://www.dartlang.org/ ) 是一门独立的语言。它拥有自己的引擎用于在非浏览器环境中运行(如:手机应用 ),它也能被编译成 JavaScript 。由 Google 开发。
115
113
116
- 还有更多其他的语言 。当然,即使我们在使用这些语言,我们也需要知道 JavaScript。因为学习 JavaScript 可以让我们真正明白我们自己在做什么。
114
+ 还有很多其他的语言 。当然,即使我们在使用这些语言,我们也需要知道 JavaScript。因为学习 JavaScript 可以让我们真正明白我们自己在做什么。
117
115
118
116
## 总结
119
117
120
- - JavaScript 最开始是为浏览器设计的一门语言,但是现在也可以在其它的环境中运行 。
118
+ - JavaScript 最开始是为浏览器设计的一门语言,但是现在也被用于很多其他的环境 。
121
119
- 现在,JavaScript 是一门在浏览器中使用最广、并且能够很好集成 HTML/CSS 的语言。
122
- - 有很多其他的语言可以编译成 JavaScript,这些语言还提供更多的功能。最好要了解一下这些语言,至少需要在掌握 JavaScript 之后简单地看一下。
120
+ - 有很多其他的语言可以被编译成 JavaScript,这些语言还提供了更多的功能。最好还是了解一下这些语言,至少在掌握了 JavaScript 之后简单地看一下。
0 commit comments