簡體   English   中英

IE 可以同時解釋 JScript 和 JavaScript 嗎?

[英]Can IE interpret both JScript and JavaScript?

IE 的window.setTimeout參考聲明setTimeout具有定義語言的可選第三個參數。

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

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

IE 解析 JavaScript 與 JScript 有何不同?

我個人認為 IE 解析和運行的 EcmaScript 方言稱為 JScript。

[編輯]

正如人們所提到的,微軟似乎將他們的 ES3 引擎標記為“JScript”,將他們的 ES5 引擎標記為“JavaScript”。 ES5 引擎在 IE9 中。

我們可以通過將"JScript"傳遞給setTimeout在 IE9 中使用他們的 ES3 引擎嗎?

我個人認為 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 的setTimeout字符串顯示的 output "2"。 但是在 JScript 中,即使是 IE8 中的最新版本,尾隨逗號意味着數組有三個條目,而不是兩個。 詳細信息在這里。 因此,IE9 在這兩種情況下都使用其最新的解釋器,如果您將“JScript”作為第三個參數傳遞,則不會以某種方式降級為“JScript”。

更新:同樣(我剛剛啟動了我的 IE8 盒子),如果你在 IE8 上運行它,你在這兩種情況下都會得到“3”。

這個 MSDN 頁面中,您可以看到 JScript 是 Microsoft 對其 ECMAScript 3 實現的名稱,而 JavaScript 是它在 IE9 中出現的 ECMAScript 5 實現的名稱。

我想我能給出的最佳答案,其他人已經做到了。

眾所周知,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 + 生成器表達式 + 表達式閉包 + 其他)
  • 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)

您可以放心地認為 JScript 與 JavaScript 相同,您不會遇到任何問題。

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

JScript 和 Javascript 在 IE 中是一樣的東西。 JScript 在 IE9 中被重命名為 JavaScript 因為更標准(或更好、更可互操作)的實現。

您引用的手冊頁指出sLanguage是一個參數,可以采用值VBScriptJScriptJavascript

並不是 JScript 與 Javascript 不同,只是兩者都是同一語言的有效名稱,它們需要同時支持這兩個名稱。

JScript 是微軟對 Javascript 的逆向工程克隆的名稱。 這些語言現在已經被 ECMA 的標准化工作合並,產生了 EcmaScript,盡管它仍然通常被稱為 Javascript。

但微軟需要同時支持這兩個名稱,因為他們希望與為仍然使用舊 JScript 名稱的舊版 IE 編寫的舊代碼保持兼容性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM