JavaScript 引擎对于浏览器来说就像是人类对语言的理解一样 。如果我们重新拿我们日常行为中的“走”、“跑”、“跳”来举例的话,一个 JavaScript 引擎是真正能够理解这些动作是何意义的根本机制 。
这个比喻可以帮我们解释一些关于浏览器的事情:

文章插图
浏览器性能的差异两个人也许会识别“跳”的命令,但是一个人由于理解和对命令的处理比另一个人更快些,也许会比另一个人对命令的反应更快些 。类似的是,两个浏览器都可以理解 JavaScript 代码,但是一个由于其 JavaScript 引擎实现起来效率更高而运行得更快 。
浏览器支持的差异
再以即使说同样语言的人们之间也会有差异为例 。即使许多人讲英语,但是一些人也许懂得他人不懂的某些词、表达式和与语法规则,反之亦然 。浏览器也是同样的道理 。尽管浏览器的 JavaScript 引擎都理解 JavaScript,但是某些浏览器会比其他的浏览器对 JavaScript 理解得更好些 。在浏览器对 JavaScript 的支持中就存在着这一的差别 。
至于说到浏览器支持,人们通常会谈到 “ECMAScript 兼容性” 而非“ JavaScript 兼容性”,尽管 JavaScript 引擎解析和执行的是 JavaScript。这个问题说起来有点绕,下面的表格可以对其作出解释 。

文章插图
如果你还记得的话,ECMAScript 是一份规定了脚本语言可以看起来像什么的规范 。发布一个新的 ECMAScript 版本并不意味着所有现存的 JavaScript 引擎突然就拥有了这些新功能 。这取决于负责那款 JavaScript 引擎的团体或组织是否要更新到最新的 ECMAScript 规范并采用其所带来的变化 。
因此,开发者倾向于问这样的问题,“这款浏览器支持哪个版本的 ECMAScript ?”或者“这款浏览器支持哪些 ECMAScript 功能?”他们想知道是否 google、Mozilla 和微软已经开始更新他们浏览器的 JavaScript 引擎了,例如 V8、SpiderMonkey 和 Chakra 是否都已经具有最新的 ECMAScript 中的功能了 。
ECMASCript 兼容性列表是回答这类问题的绝佳答案参考 。
如果新版的 ECMAScript 发布了,JavaScript 引擎不会一下子整合所有的更新 。他们会逐渐地加入 ECMAScript 功能,这一点从火狐的 JavaScript 变更记录中可见一斑:

文章插图
JavaScript 运行时JavaScript 代码运行所在的环境,并为 JavaScript 引擎所解释 。运行时提供了 JavaScript 可以运行和操作的宿主对象 。
同义词:宿主环境
JavaScript 运行时是在脚本化语言定义中所提到的“已存在的实体或系统” 。代码通过 JavaScript 引擎传递,一旦被解析和被理解之后,实体或系统将会执行解释行为 。一条狗走路,一个人跑步,一个视频游戏中的任务跳跃(或如上图例子中的那样搞破坏) 。
应用程序通过在运行时提供“宿主对象”令其本身可用于 JavaScript 脚本 。对于客户方来说,JavaScript 运行时可以是 web 浏览器,这时如视窗或 html 文档这样的宿主对象就可以用于操作了 。
你是否曾经使用过视窗或文档宿主对象呢?视窗和文档对象并非真正的核心 JavaScript 语言的一部分 。它们是 Web APIs,即扮演着 JavaScript 宿主环境的浏览器所提供的对象 。对于服务器端来说,JavaScript 运行时是 Node.js。服务器相关的宿主对象,如文件系统、处理和请求都在 Node.js 中被提供 。
有趣的一点是:不同的 JavaScript 运行时可以分享同样的 JavaScript 引擎 。例如 V8,是既为 Google Chrome 也为 Node.js 所用的 JavaScript 引擎—两个截然不同的环境 。
ECMAScript 6它是 ECMA-262 标准的第六个版本,其特点是对 ECMAScript 规范有着显著的变化和改进 。
同义词:ES6、ES2015 和 ECMAScript 2015
这一版的 ECMAScript 将其名字由 ES6 改为了 ES2015,这是由于 Ecma 国际决定每年都对 ECMAScript 发布一次 。相应地,Ecma 国际也开始基于每年所发布的来命名新版本的 ECMAScript 规范 。简而言之,ES6 和 ES2015 是对同一件事情的两个不同的名字 。
Babel一款可以将 ES6 代码转换为 ES5 代码的转译器 。
开发者可以使用 ES6 中炫目的新功能,但会为他们的 web 应用担心跨浏览器的兼容性问题 。在编写这篇文章的时候,Edge 和 Internet Explorer 并没有完全地支持 ES6 规范中的功能 。
推荐阅读
- 一文搞懂什么是 C# 计时器!
- Javascript创建对象方式总结
- 一张图读懂 5G 手机的频段
- 一文读懂4G路由器工作原理
- 对接第三方支付其实很简单,一文看懂
- 一分钟读懂三大居家风格装修
- 一文看懂三大指纹识别原理 光学屏幕指纹强在哪?
- 一文看懂华为 HMS Core 4.0 内容大全
- 一文带你详解了解Tomcat的Server配置
- JavaScript 中的异步原理
