JavaScript 概述

JavaScript 是一门跨平台、面向对象的脚本语言。

历史

由 Brendan Eich 1995年提出,主要是为了给 HTML 添加交互,能直接操作 HTML 和 CSS。

JavaScript 最初是为了让浏览器中页面“动”起来,开始名字叫 LiveScript,但当时流行 Java,为了搭上 Java,改名为 JavaScript。

JS 语言类似 Java 但在一些方面有根本性不同(两种语言都在不断演化,一些根本不同也不是很明显了),JS 是基于基本数据类型的运行时系统;JS 有基于原型链而不是类的对象模型。JS 遵循了大部分Java的表达式语法、命名规范以及基础流程控制。详细见对象模型

为方便开发,有些语言可以直接转编译成JS代码,比如:

ECMAScript规范

JS 的标准化由 Ecma International(the European association for standardizing information and communication systems)机构制定,Ecma 是其前身 the European Computer Manufacturers Association 的简写。Ecma 发布的 JS 标准化版本叫做 ECMAScript。所有支持该标准的应用应以相同的方式工作。厂商可以使用开放的标准语言来开发自己的 JS 的实现版。ECMAScript 标准文档对应的是 ECMA-262 规范。ECMA-262 标准也被 ISO (International Organization for Standardization)认可,对应的是 ISO-16262。

不同的JS和ES版本,会加入不同的JS特性,JS1.8.5版本以后,JS的版本按ECMA-262规范的版本走,比如ES5、ES2015(ES6、ECMAScript 2015)、ES2016、ES2017。

ECMAScript 是基于当时几个现有技术,最著名的是 JavaScript (Netscape) 和 JScript (Microsoft)。JS 语言是 Brendan Eich 在 Netscape 公司发明的,第一次是出现在 Netscape 的 Navigator 2.0 浏览器,Microsoft 第一次是在 Internet Explorer 3.0。

1996年11月,ECMAScript 语言规范开始开发。1997年6月的 Ecma 大会(Ecma General Assembly)通过第一版。

Ecma 标准按快速处理流程先提交到 ISO/IEC JTC 1,在1998年4月,被采纳为 ISO/IEC 16262 国际标准。为了和 ISO/IEC 16262 看齐,1998年6月的 Ecma 大会通过了 ECMA-262 第二版。第一版和第二版的差异实际只是编辑上的。

1999年12月 Ecma 大会通过了第三版,2002年6月,作为 ISO/IEC 16262:2002 国际标准。第三版引人了强大的正则表达式,更好的字符串处理,新的控制声明,try/catch 异常处理,更严格的错误定义,基于为将来语言增长的数字化输出和小幅调整做的格式化。

在开发第四版时做了重大工作,但没完成也没发布,其中一些并入第6版开发。

2009年12月的 Ecam 大会通过了第五版。第五版引入了对象的反射创建和检查,新的操作数组函数,支持 JSON 对象编码格式,严格模式。作为 ISO/IEC 16262:2011 国家标准。2011年6月的 Ecam 大会通过了5.1版,5.1版只是做了小的修正,依然对应 ISO/IEC 16262:2011。

2015年6月的 Ecma 大会通过第六版。第六版实际开始于2009年第三版,第五版是中间铺垫,期间做了大量的实验和语言增强设计,目的是为大型应用、库的创建和与其他语言兼容提供更好的支持。主要引入:模块,Class 声明,块作用域,迭代器和生成器,方便异步编程的 Promise,解构模式,正确的尾调用。ECMAScript 内置库扩展为支持新增数据结构包括 Map、Set 和二进制值数组,支持 Unicode 的字符串和正则表达式。

ES2016 是 Ecam TC39小组 的年度发版计划的首次发版,采用 GitHub 形式。ES2016 主要引入了新的幂操作符和 includes 数组方法。每年发版细节可以关注 TC39 ECMA262官网

ECMAScript 规范是一套用于实现 ECMAScript 的要求; 主旨是用于想在 ECMAScript 实现或JS引擎中实现兼容标准的语言特性。编写 JS 时参考 JS文档

ECMAScript 规范并不描述 DOM(Document Object Model),DOM 规范是由 W3C(World Wide Web Consortium)和/或 WHATWG (Web Hypertext Application Technology Working Group)制定。

引擎

现在 JS 不止在 Web 浏览器中运行,还可以在服务端,甚至任何设备,只要存在叫JS引擎的特殊程序。

Web 浏览器内置的引擎也叫 JS 虚拟机(JavaScript virtual machine)。不同引擎还有不同代号,比如:


引擎工作分三步:

  1. 读(解析)代码;
  2. 然后把代码转(编译)成机器语言;
  3. 最后运行机器码。

引擎在各个阶段都可运用优化,能观察编译后的代码的运行,并对机器码做优化。

宿主环境

JS 至今已变成了一个可在多平台使用的语言。每个平台可以对 JS core 添加平台特定的对象和方法,在 JS 规范中叫做 host environment 宿主环境。

JS 的能力极大依赖于运行的环境,比如 Node.js 提供一些函数让 JS 可读写任意文件,执行网络请求等。Web 浏览器中 JS 能力被限制主要基于用户安全考虑,目的是为了防止恶意网页访问和危害用户。

Web浏览器详见 browser

Node.js详见 Node.js



文章参考