一文读懂JavaScript和ECMAScript
对于初学者,JavaScript和ECMAScript往往使他们迷惑,这甚至使我怀疑自己并没有学习最新的版本,因此,我决定沉下心对这两个概念做一番研究,最后得出了一些结论,希望能够对你有一定的帮助。
如果你很赶时间,那么你只需要记住下面这个结论:
ECMAScript(编号为ECMA-262)是ECMA协会所制定的脚本语言的标准/规范,且与浏览器没有依赖关系,而JavaScript是一种依赖于浏览器的脚本语言,不同浏览器的JavaScript在不同程度上实现了ECMAScript标准。
如果对这个结论仍然十分迷惑或者想要更深入的了解它们之间的关系,那么请继续往下看吧。
JavaScript发展简史
JavaScript诞生于1995年,在没有JavaScript的时候,所有输入验证操作都必须由服务器端进行验证,假如需要完成登陆操作,我们需要完成以下几步:
- 点击submit按钮
- 浏览器端(前端)提交表单到服务器端(后端)
- 服务器端验证账号密码的正确性,如果正确即登陆成功,否则登陆失败,返回登陆页面
登陆成功还好,但万一灰心登陆失败就需要重新输入全部的内容,而在那个年代,人们还普遍使用电话拨号上网,可想而知,与服务器的每一次数据交换都是一次关于耐心的考验,这必然导致很差的用户体验感,于是Netscape公司决定开发客户端语言,以解决这种问题。
JavaScript开发时间线
- 1995-02:Netscape开发JavaScript 1.0完毕,支持浏览器Netscape Navigator 2
- 1996-08:微软开发JScript,与Netscape相竞争
- 1997:ECMA(欧洲计算机制造商协会)指定TC39技术委员会进行JavaScript和JScript的标准化进程,数月之后,ECMAScript出现了
- 1998:ISO/IEC也将ECMAScript作为标准(ISO/IEC-16262),从此,浏览器开发商就以ECMAScript作为各自JavaScript实现的基础
为什么需要ECMAScript?
这个问题可以上升到“为什么需要标准化”这一问题?
首先,科普一下标准和标准化的概念:
标准:《ISO/IEC Guide 2》中定义标准是由一个公认的机构制定和批准的文件,它对活动或活动的结果规定了规则、指南或特性,供共同和反复使用,以实现在预定结果领域内的最佳秩序和效益。
标准化:《ISO/IEC Guide2》中定义标准化是对实际与潜在问题做出统一规定,供共同和重复使用,以在相关领域内获取最佳秩序的效益活动。
因此,JavaScript的标准化的目的当然也是为了获取最佳秩序和效益,在未实行标准化时,Netscape和微软两家公司虽然实现的浏览器脚本语言的功能大致相同,但实现起来差异很大,在这种情况下,开发者必须同时开发两套页面,以支持两个浏览器的JavaScript功能,效率太低,因此,标准化工作必须开展了。
于是,ECMA协会根据现有的JavaScript制定了ECMAScript,在ECMAScript出现之后,此后的浏览器厂商的程序员在开发JavaScript时,都需要以ECMAScript作为基础,从此,理论上如果所有厂商实现了相同的ECMAScript版本,程序员只需要开发一次,便可以在所有浏览器上同时运行,大大提升了开发效率。
总结
我们仍然把前文的结论拿过来:ECMAScript(编号为ECMA-262)是ECMA协会所制定的脚本语言的标准/规范,且与浏览器没有依赖关系,而JavaScript是一种依赖于浏览器的脚本语言,不同浏览器的JavaScript在不同程度上实现了ECMAScript标准。
或许看完了之前的解释,你能够对这个结论更加明白一些,但我想进一步解释一下:
- ECMAScript:由ECMA-262标准文件定义的一个标准/规范;
- JavaScript:一种浏览器脚本语言,ECMAScript的实现之一;
- ECMAScript不依赖于浏览器:它独立存在,不只是JavaScript实现了它,其它实现了ECMAScript的语言如Node和Adobe Flash,而且,它不定义DOM,事实上,DOM是由W3C所制定的另一个标准,是ECMAScript的扩展,也是JavaScript的实现之一;
- JavaScript依赖于浏览器:它不仅实现了ECMAScript,还根据浏览器的特性扩展了ECMAScript,实现了DOM和BOM;
- 不同浏览器的JavaScript在不同程度上实现了ECMAScript标准:应当始终牢记,JavaScript依赖于浏览器而存在,但开发浏览器的厂商有很多,它们对ECMAScript标准的实现方式不尽相同、实现版本也不尽相同,自然可能会有不同的结果甚至执行效率;
- 当我们提及JavaScript时,事实上并没有考虑不同浏览器JavaScript的区别,可以认为JavaScript是一个广义的概念,狭义上看,每个浏览器的JavaScript各不相同。
总之,ECMAScript 基于 JavaScript而制定, JavaScript 基于 ECMAScript而实现。
参考
1 What’s the difference between JavaScript and ECMAScript?
2 《ISO/IEC Guide 2》
3 《JavaScript高级程序设计 第三版》
希望本文使你能够明白并且准确区分JavaScript和ECMAScript两个概念,如果你喜欢这篇文章,不妨为我点个赞,这已经对我写作的很大鼓励了,如果你有任何疑问,不妨留言交流,再次感谢你的阅读!
本文首发于微信公众号:林木菌,最近对公众号比较感兴趣,如果你愿意关注我,不胜感激~