为什么JavaScript需要ECMAScript标准?

时间:2019-11-02 15:27:39

标签: javascript

您为什么要有一种语言以及该语言的规范/标准?难道不是另一层复杂性吗?

C#,C ++-他们没有标准。那么为什么JavaScript需要一个标准而C#却不需要呢?

1 个答案:

答案 0 :(得分:2)

TL; DR:您可能不需要一个小型木屋的房屋计划,但是最好有一个三层房屋的计划。 制定计划时,您可以识别错误并更改路线,以防止代价高昂的错误。

因此,除了某些复杂性之外,还需要一种语言规范。 语言规范也不仅仅是规范本身。规范过程对于语言的发展同样重要。


是的,大多数编程语言都有/已经有一个标准。 C#C++Java,甚至PowerShell。 当Perl和PHP被限制在一个实现中时,它们都没有规范了很长一段时间。 (是的,没有说明的语言可以成功。) PHP获得了maintaining HipHop(一种替代引擎)的规范。 规格之后,Perl 6得到了two compilers

对于Netscape Navigator的JavaScript,IE copied it为JScript,Flash将其复制为ActionScript。 Netscape作为当时的主要浏览器,负责任地将其提交给ECMA以确保兼容性。 第一版发布于1997年。

是的,ECMAScript不是在版本5上诞生的。 它诞生于20世纪。

该规范成功地保持了快速发展的核心语言跨平台。 例如,由于规范,版本3添加了正则表达式并尝试catch,并且所有浏览器都以相同的方式(more or less)来实现它们。

但是版本4失败了。供应商拥有differed ideas,其中ECMAScript splitting into two和赢得第一次浏览器大战的微软失去了兴趣,并按照自己的方式发展(JScript.Net)。 这场战斗将持续10年,在此期间,有效的冻结核心JavaScript。

因此second browser war开始而没有新的JS规范Many frameworks arose to extend JS,通常将方法添加到本机对象并实现它们自己的类引擎,它们彼此不兼容。

浏览器供应商意识到他们需要结束战斗。

因此诞生了ES5。它brings有许多急需的方法(Array.find .map .forEach等),JSON,getter和setter以及严格的模式,这些奠定了ES6的基础。 这是一个真正的突破,因为它使所有主流浏览器unified达到了统一的标准。

ES5开始了一个新的JS时代。

ES5之后不久,我们获得了许多我们现在理所当然的语言功能:类,for,Map,Set,TypedArray,Promise,等待异步,箭头函数等。 供应商discuss完全每个功能,并对其进行试验,以确保每个新功能都可以无缝配合,运行速度快且不会破坏网络。

例如,为{6}提议了Array.contains。 在草稿之后,found是一个通用库(到那时)添加了自己的Array.contains并且不兼容。 最后,最终规格更改为Array.includes,确保使用该库的站点不会损坏。

ES6的letconstdiffers来自失败的ES4。 ES6版本更有用,更精确,而且由于采用了严格的模式,因此可以保持向后兼容。

(是Backward compatibility。 听说过with statement吗?它仍然是in the spec。 对于这样一个简单的速记,它会导致许多headaches并因此是deprecated。 对于caller同样。 JavaScript高度复杂的部分原因在于其混乱的历史。)

像这样的“后台”讨论太多了,如果没有详细说明的过程将很难事先讨论。 无论您是否意识到它们,我们都将从中受益。


由于规范,所有浏览器的JavaScript和核心对象的行为几乎都是相同的。

感谢规范,那些不容易识别和修复的问题被优先考虑。

感谢规范,可以更好地讨论和保留向后和向前的兼容性。

由于规范,日益复杂的语言核心仍然保持一致和快速。

由于规范,尽管独立的浏览器为争夺市场份额而相互竞争,但JavaScript仍可以作为一个统一的实体发展。

语言规范很复杂,是的,但是对于语言的健康而言是必需的。 有点像JavaScript class