ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,英文名称是European Computer Manufacturers Association)通过ECMA-262标准化的脚本程序设计语言。这种语言在万维网上应用广泛,它往往被称为JavaScript或JScript,所以它可以理解为是JavaScript的一个标准,但实际上后两者是ECMA-262标准的实现和扩展。
ECMA International是一家国际性会员制度的信息和电信标准组织,它和企业密切相连的组织,所以 Ecma国际制定的规范标准都是由各类企业来做主要的制定和推广。1997年该组织发布了MCMA-262的标准,该标准制定了ECMAScript语言规范。ECMAScript就是从这里来的。
ECMA-262是ECMA TC39小组制定的关于脚本语言的规范标准。TC39成员由来自一些对脚本编程感兴趣的公司的程序员组成的。
ECMA-262标准定义了ECMAScript语言规范。这个标准也叫成为ECMAScript语言规范(ECMAScript Language Specification),简称ES规范。
ES规范从1997发布到现在为止是第八个版本。ECMAScript是基于几种原始技术,最著名的是JavaScript(Netscape Navigator 2.0)和JScript(Microsoft IE3)。
1995年前后:互联网爆发,Web应用层出不穷,那时候只要有注册一个.com的域名,基本就能暴富,就如同现在的区块链和人工智能。就在那时候JavaScript有三个主流版本:
(1)Netscape Navigator 3.0 中的 JavaScript。
(2)IE 中的 JScript。
(3)CEnvi 中的ScriptEase。
与和其它编程语言不同的是,JavaScript 并没有一个标准来统一其语法或特性,而这 3 种不同的版本恰恰突出了这个问题。随着业界担心的增加,这个语言的标准化显然已经势在必行。
1997年:JavaScript 1.1 作为一个草案提交给欧洲计算机制造商协会(ECMA)。第 39 技术委员会(TC39)被委派来“标准化一个通用、跨平台、中立于厂商的脚本语言的语法和语义”。 锤炼出了 ECMA-262第一版,该标准定义了名为 ECMAScript 的全新脚本语言。
1998年:国际标准化组织及国际电工委员会(ISO/IEC)也采纳 ECMAScript 作为标准(ISO/IEC-16262)。同年发布了ECMA-262第二个版(ES2).第二个版本基本没有加新功能。
2002年:ECMA-262第三版(ES3),新增引入了强大的正则表达式,更好的字符串处理,新的控制语句,try / catch异常处理,更严格的错误定义,数字输出的格式化以及预期未来语言增长的微小变化。第三版在当时应用非常广泛,几乎所有的浏览器都支持ES3的标准。
ECMA-262第4版本(ES4)夭折,部分功能被迁移到ES6中。
2009年:ECMA-262第五版(ES5)发布。在ES3的基础上增加了很多功能:包括访问器属性,对象的反射创建和检查,属性的程序控制,附加的数组操作函数,对JSON对象编码格式的支持以及提供增强的错误检查和程序安全性的严格模式。
2011年:被批准为国际标准ISO/IEC 16262:2011。同年发布ES5.1版本(对ES5做一些升级优化)同时被MCMA-262和ISO/IEC批准。
2015年:ECMA-262第六版(ES6或者叫ES 2015语言规范),ES6可以说从2000年,ES3发布之后就开始沉淀,由于ES4的夭折,ES4中的一些功能特性一直等到ES6才发布,所以第六版的完全是十五年的努力的结果。
ES6为大型应用程序提供更好的支持,创建Lib库,以及使用ECMAScript作为其它语言的编译目标。ES6主要新增了如下功能:主要增强包括模块,类声明,词法块范围,迭代器和生成器,异步编程的承诺,解构模式和适当的尾部调用。内置的ECMAScript库被扩展为支持额外的数据抽象,包括映射,集合和二进制数值数组,以及对字符串和正则表达式的使用。
JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
JavaScript是通用的跨平台脚本语言,遵守ECMA-262标准(ES标准),换句话说就是ECMAScript的方言。为了取得技术优势,微软推出了JScript,CEnvi推出ScriptEase,与JavaScript同样可在浏览器上运行。为了统一规格,因为JavaScript兼容于ECMA标准,因此也称为ECMAScript。
JavasSript商标属于Oracle公司,因为Sun公司被Oracle收购。JavaScript早年被Sun公司注册,代表JavaScript这门语言。但是最早发明JavaScript是网景公司。在1995年时,由Netscape公司的Brendan Eich,在网景导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语法风格与Self及Scheme较为接近。
JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的。
(1)一种解释性脚本语言(代码不进行预编译)。
(2)主要用来向HTML(标准通用标记语言下的一个应用)页面添加交互行为。
(3)可以直接嵌入HTML页面,但写成单独的JS文件有利于结构和行为的分离。
(4)跨平台特性,在绝大多数浏览器的支持下,可以在多种平台下运行(如Windows、Linux、Mac、Android、iOS等)。
Javascript脚本语言同其它语言一样,有它自身的基本数据类型,表达式和算术运算符及程序的基本程序框架。Javascript提供了四种基本的数据类型和两种特殊数据类型用来处理数据和文字。而变量提供存放信息的地方,表达式则可以完成较复杂的信息处理。
JavaScript由ECMAScript、DOM、BOM三部分组成,如下图。
(1)ECMAScript:描述了该语言的语法和基本对象。
(2)DOM:文档对象模型(DOM),描述处理网页内容的方法和接口。
(3)BOM:浏览器对象模型(BOM),描述与浏览器进行交互的方法和接口。
文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口。在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标准模型就称为DOM。Document Object Model的历史可以追溯至1990年代后期微软与Netscape的“浏览器大战”,双方为了在JavaScript与JScript一决生死,于是大规模的赋予浏览器强大的功能。微软在网页技术上加入了不少专属事物,既有VBScript、ActiveX、以及微软自家的DHTML格式等,使不少网页使用非微软平台及浏览器无法正常显示。DOM即是当时蕴酿出来的杰作。
BOM(Browser Object Model)即浏览器对象模型。BOM提供了独立于内容而与浏览器窗口进行交互的对象;由于BOM主要用于管理窗口与窗口之间的通讯,因此其核心对象是window;BOM由一系列相关的对象构成,并且每个对象都提供了很多方法与属性;BOM缺乏标准,JavaScript语法的标准化组织是ECMA,DOM的标准化组织是W3C,BOM最初是Netscape浏览器标准的一部分。
浏览器窗口交互的一些对象,例如可以移动、调整浏览器大小的window对象,可以用于导航的location对象与history对象,可以获取浏览器、操作系统与用户屏幕信息的navigator与screen对象,可以使用document作为访问HTML文档的入口,管理框架的frames对象等。
JavaScript处理引擎是能解析并且运行JavaScript代码的解释器。浏览器通常会有JavaScript引擎,JavaScript刚出来时就是运行在浏览器中,作为客户端语言使用。
常见的JavaScript引擎:
(1)Chrome V8
(2)Firefox SpiderMonkey
(3)Microsoft Edge Chakra
提一下Node.js是基于Chrome V8引擎。上文提到V8引擎是用来解析执行JS,并且V8是基于ECMAScript标准实现的。换个角度说,Node.js里头没有DOM和BOM的操作,只保留的JavaScript的语法核心(ES),并且增加了事件驱动的非阻塞 I/O 模型,使其轻量级和高效。Node.js作为服务运行在Windows、Linux、Mac,把JavaScript的角色从前台开发,转移到了后台开发。
还有当前有点过时的用于Flash编程的ActionScript也是ECMAScript的具体实现。
学习资料来源:
(1)链接:https://www.jianshu.com/p/10cfcb536d4a
(2)链接:http://www.softwhy.com/article-9807-1.html
(3)链接:https://baike.baidu.com/item/javascript/321142