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
文章参考