JavaScript 概述
JavaScript 是一门跨平台、面向对象的脚本语言。
历史
由 Brendan Eich 1995年提出,主要是为了给 HTML 添加交互,能直接操作 HTML 和 CSS。
JavaScript 最初是为了让浏览器中页面“动”起来,开始名字叫 LiveScript,但当时流行 Java,为了搭上 Java,改名为 JavaScript。
为方便开发,有些语言可以直接转编译成JS代码,比如:
- CoffeeScript 是 JS 的语法糖(syntactic sugar),更短的语法,代码更精确清晰,通常 Ruby 开发者喜欢用。
- TypeScript 关注严格数据类型(strict data typing),简化开发和支持复杂系统。
- Dart 是个独立语言,开始是被 Google 用来替代 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)。不同引擎还有不同代号,比如:
- V8 – Chrome和Opera
- SpiderMonkey – Firefox
- …IE 有 Trident 和 Chakra,Safari 有 Nitro 和 SquirrelFish。
引擎工作分三步:
- 读(解析)代码;
- 然后把代码转(编译)成机器语言;
- 最后运行机器码。
引擎在各个阶段都可运用优化,能观察编译后的代码的运行,并对机器码做优化。
宿主环境
JS 至今已变成了一个可在多平台使用的语言。每个平台可以对 JS core 添加平台特定的对象和方法,在 JS 规范中叫做 host environment 宿主环境。
JS 的能力极大依赖于运行的环境,比如 Node.js 提供一些函数让 JS 可读写任意文件,执行网络请求等。Web 浏览器中 JS 能力被限制主要基于用户安全考虑,目的是为了防止恶意网页访问和危害用户。
Web浏览器详见 browser
Node.js详见 Node.js
文章参考