7

window.setTimeoutIE 状态的参考setTimeout具有定义语言的可选第三个参数。

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

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

IE 解析 JavaScript 与 JScript 有何不同?

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

[编辑]

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

"JScript"我们可以通过传入到IE9 中使用他们的 ES3 引擎setTimeout吗?

4

6 回答 6

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);
}

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

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

于 2011-07-22T13:56:14.487 回答
3

这个 MSDN 页面中,您可以看到 JScript 是 Microsoft 对其 ECMAScript 3 实现的名称,而 JavaScript 是其在 IE9 中出现的 ECMAScript 5 实现的名称。

于 2011-07-22T13:55:34.043 回答
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 Expressions + Expression Closures + 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 引擎”。所以我们可能可以扩展上面的列表

  • IE9 支持 JScript 9(相当于 ECMAScript 5、JavaScript 1.8.5)
于 2011-07-22T13:54:18.527 回答
1

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

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

于 2011-07-22T13:53:47.263 回答
1

JScript 和 Javascript 在 IE 中是相同的东西。JScript 在 IE9 中被重命名为 JavaScript,因为它实现了更标准(或更好、更可互操作)的实现。

于 2011-07-22T13:54:11.240 回答
1

您引用的手册页指出,这sLanguage是一个可以采用值VBScriptJScript或的参数Javascript

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

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

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

于 2011-07-22T13:59:53.327 回答