IE可以解释JScript和JavaScript吗?

时间:2011-07-22 13:49:21

标签: javascript internet-explorer javascript-engine

IE的window.setTimeout引用声明setTimeout有一个可选的第三个参数来定义语言。

可能的语言是JScript,VBScript和JavaScript。

我已经知道IE可以解析VBScript但是

IE如何以不同于JScript的方式解析JavaScript?

就我个人而言,我认为IE解析器和运行的EcmaScript方言称为JScript。

[修改

正如人们所提到的,微软似乎将他们的ES3引擎标记为“JScript”,将他们的ES5引擎标记为“JavaScript”。 ES5引擎在IE9中。

我们可以通过将"JScript"传递给setTimeout来在IE9中使用他们的ES3引擎吗?

6 个答案:

答案 0 :(得分:6)

  

就我个人而言,我认为IE解析器和运行的EcmaScript方言称为JScript。

是的。第三个参数的“JScript”和“JavaScript”值只是同义词。我找不到它的参考,但你可以肯定IE没有两个独立的解释器,一个有JScript-isms,另一个没有。

以下是证据:如果你在IE9中运行它(live copy):

HTML:

<input type='button' id='btnJScript' value='JScript'>
<input type='button' id='btnJavaScript' value='JavaScript'>

JavaScript的:

window.onload = function() {

  document.getElementById('btnJScript').onclick = function() {
    testIt("JScript");
  };
  document.getElementById('btnJavaScript').onclick = function() {
    testIt("JavaScript");
  };

  function testIt(lang) {
    var s = "var a = [1, 2, ]; display(a.length);";
    display("Calling <code>setTimeout</code> with <code>'" +
            s + "', 0, '" + lang + "'</code>");
    setTimeout(s, 0,lang);
  }
};

function display(msg) {
  var p = document.createElement('p');
  p.innerHTML = msg;
  document.body.appendChild(p);
}

在这两种情况下,您都会得到eval'd setTimeout字符串显示的输出“2”。但是在JScript中,即使是IE8中的最新版本,尾随逗号也意味着数组有三个条目,而不是两个条目。 Details on that here.因此,IE9在两种情况下都使用其最新的解释器,如果您将“JScript”作为第三个参数传递,以某种方式降级为“JScript”。

更新:同样(我刚刚启动了我的IE8盒子),如果你在IE8上运行它,你会在两种情况下得到“3”。

答案 1 :(得分:3)

this MSDN page开始,您可以看到JScript是其实现ECMAScript 3的Microsoft名称,而JavaScript是IE9中出现的ECMAScript 5实现的名称。

答案 2 :(得分:2)

我想我能给出的最佳答案,其他人已经做过了。

众所周知,Resig先生亲自:http://ejohn.org/blog/versions-of-javascript/

  • IE 6-7支持JScript 5(相当于ECMAScript 3,JavaScript 1.5)
  • IE 8支持JScript 6(相当于ECMAScript 3,JavaScript 1.5 - 比JScript 5更多的错误修复)
  • Firefox 1.0支持JavaScript 1.5(相当于ECMAScript 3)
  • Firefox 1.5支持JavaScript 1.6(1.5 + Array Extras + E4X + misc。)
  • Firefox 2.0支持JavaScript 1.7(1.6 + Generator + Iterators + let + misc。)
  • Firefox 3.0支持JavaScript 1.8(1.7 + Generator表达式+表达式闭包+ misc。)
  • 下一版本的Firefox将支持JavaScript 1.9(1.8 +待定)
  • Opera支持的语言相当于ECMAScript 3 + Getters and Setters + misc。
  • Safari支持的语言相当于ECMAScript 3 + Getters and Setters + misc。

我猜IE9的JScript引擎( Chakra )尽可能接近“Javascript”。但是,它支持ES5的许多功能。请参阅“IE9 Javascript engine”。所以我们可以用

来扩展上面的列表
  • IE9支持JScript 9(相当于ECMAScript 5,JavaScript 1.8.5)

答案 3 :(得分:1)

您可以放心地认为JScript与JavaScript相同,您不会遇到任何问题。

http://en.wikipedia.org/wiki/JScript#Comparison_to_JavaScript

答案 4 :(得分:1)

JScript和Javascript在IE中是相同的。由于更标准(或更好,更具互操作性)的实现,JScript在IE9中被重命名为JavaScript。

答案 5 :(得分:1)

您引用的手册页指出sLanguage是一个可以取值VBScriptJScriptJavascript的参数。

JScript与Javascript不同,它只是两个都是同一种语言的有效名称,它们需要同时支持两种名称。

JScript是微软的反向工程克隆Javascript的名称。这些语言现在已经被ECMA的标准化工作合并,产生了EcmaScript,尽管它通常仍被称为Javascript。

但微软需要同时支持这两个名称,因为他们希望保留与旧版本的IE编写的旧代码的兼容性,这些代码仍使用旧的JScript名称。