javascript编译器是否因web浏览器而异

javascript编译器是否因web浏览器而异,javascript,browser,Javascript,Browser,所以我想问的是,每个web浏览器是否都有自己的编译器示例IE从网站编译Javascript并生成字节码序列 另一方面,google chrome从同一个网站编译相同的Javascript并生成序列B 我想知道这一点,因为如果是这样的话,在Javascript上运行编译器并将生成的字节码上传到网站而不是Javascript本身是否有益。并根据每个浏览器发送不同的字节码 或者还有其他一些限制 有几种广泛使用的JavaScript(或者更确切地说是ECMAScript)实现,虽然理论上有标准,但最广泛

所以我想问的是,每个web浏览器是否都有自己的编译器示例IE从网站编译Javascript并生成字节码序列

另一方面,google chrome从同一个网站编译相同的Javascript并生成序列B

我想知道这一点,因为如果是这样的话,在Javascript上运行编译器并将生成的字节码上传到网站而不是Javascript本身是否有益。并根据每个浏览器发送不同的字节码


或者还有其他一些限制

有几种广泛使用的JavaScript(或者更确切地说是ECMAScript)实现,虽然理论上有标准,但最广泛使用的是ES5(ECMAScript 5)-是的,并非所有浏览器中的所有内容都正确、一致地实现(我在看你,老的IE

下面是ES5的兼容性表格(您今天要写的表格):

对于闪亮的全新ES6,这里有同样的内容:

请注意这些表格顶部的免责声明:

请注意,其中一些测试表示存在,而不是功能性或完全一致性

另外,关于JavaScript是编译语言还是解释语言的问题:它肯定是解释语言——至少最初是这样。但是现在使用的大多数常见JavaScript引擎都实现了JIT(即时编译器),在执行之前将大部分JavaScript翻译成字节或机器码(ergo编译)


这些引擎中使用最广泛(也是性能最好)的是WebKit使用的V8(因此出现在Chrome、Safari、Opera中,…-Node.JS也在使用它)。阅读有关V8及其JIT实现的更多信息:

是的,每个浏览器都有自己的ECMAScript引擎实现,最常见的是实现/支持ECMA-262,通常称为JavaScript。虽然有几个大型相关的浏览器引擎系列,如Webkit,但每个引擎还可以有自己的JavaScript引擎。例如,正如许多人指出的,谷歌使用的是V8引擎。由于这些引擎的工作方式各不相同,因此它们之间没有一组代码是确定的,就像Java代码在任何支持JVM的机器上运行一样

从本质上讲,JavaScript不像传统语言(如Java或C/C++)那样编译。这就是为什么没有第三方程序的帮助,在JavaScript代码运行之前,您无法在代码中找到非语法错误。ECMAScript是一种解释语言

现在,这是棘手的部分。事实上,大多数现代JavaScript引擎都会将JavaScript编译成另一种语言(也称为源代码到源代码编译或传输),如C,以对其执行性能优化。当然,在某些时候,所有代码都会被编译成字节码


编写适用于所有主流浏览器的JavaScript的最佳选择是使用核心/标准特性。例如,这意味着在使用
new Date()
时以“yyyy/mm/dd”而不是“yyy-mm-dd”的形式传递时间戳字符串,因为Firefox不支持后一种格式-Chrome开发人员只是为了对您友好而添加了它。IE因以不同方式处理某些非标准特性而臭名昭著。我非常喜欢帮助解决这个问题。

现在大多数javascript引擎都是JIT编译器。详情如下:


是的,javascript是编译的(而不是解释的),大多数主流浏览器的编译方式都不同。

正如其他人所指出的,有不同的,其中一些使用的是JIT(即时)编译器,而另一些使用的是运行时解释器,与后一种选择相比,前者是当今大多数浏览器的首选选择,因为它提供了一些性能优势

您可以在上看到关于此的另一个问题:

例如,谷歌浏览器中使用的是JavaScript引擎,也可以嵌入到C++应用程序中。 关于将编译或预编译代码发送到客户端而不是原始JS的想法,有一些项目正在进行类似的工作:

由一个严格的JavaScript子集组成,使用静态类型语言编写的代码通过手动内存管理(如C)被翻译成JavaScript,例如(基于)。通过将语言特性限制在那些易于优化和其他性能改进的特性上,可以提高性能

关于Asm.js的一个重要事实是,现有的JavaScript引擎可以很好地使用其代码风格,因此您可以立即开始使用它!但是它产生的代码仍然是我们所知道的JS的子集,但它的编写方式有助于JS引擎更快地运行:

当然,对于如何使用它,也有很多限制,因为它主要是面向只处理数字的。看

对Asm.js的真正支持仍然是一个限制,因此您不能使用类似于
“使用Asm”
的东西,尽管您可以在今天的浏览器上运行Asm.js代码并获得一些性能改进,但它不会像在优化Asm.js代码的浏览器中那样好。然而,我们可能会在(希望不久的将来)开始这方面的改进和其他一些改进。看


同时,对于需要处理的不仅仅是数字的更通用的JS,您可以使用。我建议您先看一看,然后可以开始在浏览器中使用它。

浏览器不编译JavaScript;他们解释它。@ProgramFOX在过去这是真的,现在他们也编译成字节码有不同的脚本引擎,是的,但我不确定是什么