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



文章参考