天天看点

ECMAscript和Javascript的区别

ECMAscript VS JavaScript

刚开始学习js的时候很困惑,一些论坛网站书本会提到ECMAscript和ES5/6等字眼,这个东西跟我学习的js有什么关系吗?当时我怀疑我学习的js是过时的js,如同我刚学pthon的时候,大家都转py3,而我却浑然不知还在py2上发力。

基于这个前提,在学习javascript之前,我们先搞清楚ECMAscript和javascript的区别和历史渊源。

ECMAscript 和ECMA International

ECMA International是一家国际性会员制度的信息和电信标准组织,它和企业密切相连的组织,所以 Ecma国际制定的规范标准都是由各类企业来做主要的制定和推广。1997年该组织发布了MCMA-262的标准,该标准制定了MCMAscript语言规范。ECMAscript就是从这里来的。

ECMA-262

ECMA-262是ECMA TC39小组制定的关于脚本语言的规范标准。TC39成员由来自一些对脚本编程感兴趣的公司的程序员组成的。

ECMA-262标准定义了ECMAscript语言规范。这个这个标准也叫成为ECMAscript语言规范(ECMAScript Language Specification),简称ES规范。

ES规范从1997发布到现在为止是第八个版本。ECMAscript是基于几种原始技术,最着名的是javascript(netscape navigator 2.0)和jscript(microsoft ie3)。

JavaSript标准化的历程

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)被委派来“标准化一个通用、跨平台、中立于厂商的脚本语言的语法和语义”(http://www.ecma-international.org/memento/TC39.htm)。 锤炼出了 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库被扩展为支持额外的数据抽象,包括映射,集合和二进制数值数组,以及对字符串和正则表达式中的

ECMAscript

根据MCMA-262标准,实现的通用脚本语言规范。

javascript

通用的跨平台脚本语言,他遵守ECMA262的标准,换句话说就是ECMAscript的方言,其他的还有微软的jscript等。

JavasSript商标属于oracle公司,因为sun公司被oracle收购。JavaScript早年被sun公司注册,代表javascript这门语言。但是最早发明javascript是网景公司。

通过学习javascript,你可以学会如何使用javascript进行编程,开发web应用。javascript实现包含三个方面:

1. ECMAscript(语言核心功能基于ES规范)
2. DOM— js需要支持对DOM的维护,通过document,element对象实现.这些都是在ES中没有的.
3. BOM— js需要支持对BOM的维护,通过window对象实现.这些都是在ES中没有的.
           

所以很明显,学习javascript你必须学习三分方面的知识:

1.ES5/ES6语法(一些网络资源和书中所学的js语法,大部分还是采用是ES5,ES6语法比较新,一些浏览器对ES6不兼容,所以一般会用一些转换工具如Babel进行转换。)
2.用第一部分学的语法,通过DOM对象提供的属性方法来操作DOM。
3.用第一部分学的语法,通过BOM对象提供的属性方法来操作BOM。
           
截至 2012 年,所有的现代浏览器都完整了支持 ECMAScript 5.1,旧式的浏览器至少支持 ECMAScript 3 标准。在2015年6月17日,ECMA国际组织发布了 ECMAScript 的第六版,该版本正式名称为ECMAScript 2015,但通常被称为 ECMAScript 6 或者ES6。自此,ECMAScript每年发布一次新标准。

JavaScript处理引擎

能解析并且运行js代码的解释器。

浏览器通常会有js引擎,js刚出来时就是运行在浏览器中,作为客户端语言使用。常见的js引擎有:

  • chrome v8
  • firefox SpiderMonkey
  • edge chakra
提一下nodejs.nodejs是基于chrome V8引擎。上文提到V8引擎是用来解析执行JS,并且V8是基于ECMAscirpt标准实现的.换个角度说,nodejs里头没有DOM和bom的操作,只保留的javascript的语法核心(ES),并且增加了事件驱动的非阻塞I / O模型,使其轻量级和高效。nodejs作为服务运行在linux,mac,window,把javascipt的角色从前台开发,转移到了后台开发。

浏览器性能差异

这个与JavaScript引擎的实现方式有关系。

浏览器支持差异

多种不同的js引擎处理同一份js代码会存在差异,这种差异是处理引擎造成的,有的浏览器支持,有的浏览器不支持,这就造成兼容性的问题。

继续阅读