7

window.setTimeoutIEのリファレンスにsetTimeoutは、言語を定義するオプションの3番目のパラメーターがあると記載されています。

可能な言語は、JScript、VBScript、およびJavaScriptです。

IEがVBScriptを解析できることはすでに知っていますが、

IEはJavaScriptをJScriptとどのように解析しますか?

個人的には、IEがパーサーして実行するEcmaScriptの方言はJScriptと呼ばれていると思いました。

[編集]

人々が言及したように、MicrosoftはES3エンジンを「JScript」、ES5エンジンを「JavaScript」とラベル付けしているようです。ES5エンジンはIE9にあります。

"JScript"に渡すことで、IE9でES3エンジンを使用できますsetTimeoutか?

4

6 に答える 6

6

個人的には、IEがパーサーして実行するEcmaScriptの方言はJScriptと呼ばれていると思いました。

です。3番目のパラメーターの「JScript」と「JavaScript」の値は単なる同義語です。私はそれのリファレンスを見つけることができませんが、IEには2つの別々のインタープリターがないことは確かです。1つはJScriptイズムを持ち、もう1つは持っていません。

そして、ここに証拠があります:これをIE9(ライブコピー)で実行する場合:

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文字列によって表示される出力「2」を取得します。しかし、JScriptでは、IE8の最新バージョンでさえ、その末尾のコンマは、配列に2つではなく3つのエントリがあることを意味します。詳細はこちら。したがって、IE9はどちらの場合も最新のインタープリターを使用しており、3番目のパラメーターとして「JScript」を渡した場合に何らかの方法で「JScript」にダウンシフトすることはありません。

更新:同様に(IE8ボックスを起動したばかりです)、これをIE8で実行すると、どちらの場合も「3」になります。

于 2011-07-22T13:56:14.487 に答える
3

このMSDNページから、JScriptはECMAScript 3の実装のMicrosoftの名前であるのに対し、JavaScriptはIE9に表示されるECMAScript5の実装の名前であることがわかります。

于 2011-07-22T13:55:34.043 に答える
2

私が与えることができる最良の答えは、他の誰かがすでにやったと思います。

よく知られている、Resig氏自身:http://ejohn.org/blog/versions-of-javascript/

スニペット

  • IE6-7はJScript5(ECMAScript 3、JavaScript 1.5と同等)をサポートします
  • IE8はJScript6をサポートします(これはECMAScript 3、JavaScript 1.5と同等です– JScript 5よりも多くのバグ修正)
  • Firefox1.0はJavaScript1.5をサポートします(ECMAScript 3と同等)
  • Firefox1.5はJavaScript1.6をサポートしています(1.5 + Array Extras + E4X +その他)
  • Firefox2.0はJavaScript1.7をサポートしています(1.6+ジェネレーター+イテレーター+let +その他)
  • Firefox3.0はJavaScript1.8をサポートしています(1.7 +ジェネレーター式+式クロージャー+その他)
  • Firefoxの次のバージョンはJavaScript1.9をサポートします(1.8 +未定)
  • Operaは、ECMAScript3+ゲッターとセッター+その他と同等の言語をサポートしています。
  • Safariは、ECMAScript 3 + Getters and Setters+miscと同等の言語をサポートしています。

IE9のJScriptエンジン( Chakra)は、可能な限り「Javascript」に近いと思います。ただし、ES5の多くの機能をサポートしています。「IE9Javascriptエンジン」を参照してください。したがって、おそらく上記のリストを次のように拡張できます

  • IE9はJScript9(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とることができるパラメータが記載されています。VBScriptJScriptJavascript

JScriptがJavascriptと異なるわけではありません。どちらも同じ言語の有効な名前であり、両方の名前をサポートする必要があります。

JScriptは、JavascriptのリバースエンジニアリングされたクローンのMicrosoftの名前でした。これらの言語は、ECMAの標準化作業によって統合され、EcmaScriptが作成されましたが、一般的にはJavascriptと呼ばれています。

ただし、Microsoftは両方の名前をサポートする必要があります。これは、古いJScript名を引き続き使用する古いバージョンのIE用に記述された古いコードとの互換性を維持したいためです。

于 2011-07-22T13:59:53.327 に答える