Может ли IE интерпретировать как JScript, так и JavaScript? - PullRequest
7 голосов
/ 22 июля 2011

Ссылка window.setTimeout для IE гласит, что setTimeout имеет необязательный третий параметр, определяющий язык.

Возможные языки: JScript, VBScript и JavaScript.

Я уже знаю, что IE может анализировать VBScript, но

Как IE анализирует JavaScript не так, как JScript?

Лично я считал диалект EcmaScript тем IEпарсеры и прогоны назывались JScript.

[ Edit ]

Как уже упоминалось, кажется, что Microsoft маркирует свой ES3-движок как «JScript», а свой ES5-движок - как «JavaScript».Ядро ES5 находится в IE9.

Можем ли мы использовать их движок ES3 в IE9, передав от "JScript" до setTimeout?

Ответы [ 6 ]

6 голосов
/ 22 июля 2011

Лично я думал, что диалект EcmaScript, который анализирует и запускает IE, называется JScript.

Это так. Значения «JScript» и «JavaScript» для третьего параметра являются просто синонимами. Я не могу найти ссылку на него, но вы можете быть совершенно уверены, что в IE нет двух разных интерпретаторов, один из которых имеет JScript-измы, а другой - нет.

И вот доказательство: если вы запустите это в 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);
}

В обоих случаях вы получите вывод «2», отображаемый строкой eval'd setTimeout. Но в JScript, даже в самой последней версии IE8, эта запятая означала бы, что в массиве три записи, а не две. Подробности об этом здесь. Таким образом, IE9 использует свой последний интерпретатор в обоих случаях, не , понижающий до "JScript" каким-то образом, если вы передаете "JScript" в качестве третьего параметра.

Обновление : И точно так же (я только что запустил свою коробку IE8), если вы запустите это на IE8, вы получите «3» в обоих случаях.

3 голосов
/ 22 июля 2011

Из этой страницы MSDN вы можете видеть, что JScript - это имя Microsoft для реализации ECMAScript 3, тогда как JavaScript - это имя для реализации ECMAScript 5, которая появляется в IE9.

2 голосов
/ 22 июля 2011

Наверное, лучший ответ, который я мог бы дать, кто-то другой уже сделал.

Хорошо известно, лично господин Резиг: 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 + дополнительные массивы + E4X + разное).
  • Firefox 2.0поддерживает JavaScript 1.7 (1.6 + Generator + Iterators + let + misc.)
  • Firefox 3.0 поддерживает JavaScript 1.8 (1.7 + выражения генератора + замыкания выражений + misc.)
  • Следующая версия Firefox будетподдержка JavaScript 1.9 (1.8 + подлежит определению)
  • Opera поддерживает язык, эквивалентный ECMAScript 3 + Getter and Setters + misc.
  • Safari поддерживает язык, эквивалентный ECMAScript 3 + геттеры и сеттеры + разное.

Я полагаю, что JScript-движок IE9 ( Chakra ) максимально приближен к "Javascript".Тем не менее, он поддерживает многие функции ES5.Смотрите " IE9 Javascript engine ".Таким образом, мы, вероятно, могли бы расширить вышеуказанный список с помощью

  • IE9 поддерживает JScript 9 (что эквивалентно ECMAScript 5, JavaScript 1.8.5)
1 голос
/ 22 июля 2011

На странице руководства, на которую вы ссылаетесь, указано, что sLanguage - это параметр, который может принимать значения VBScript, JScript или Javascript.

Дело не в том, что JScript отличаетсяиз Javascript, просто оба являются допустимыми именами для одного и того же языка, они должны поддерживать оба имени.

JScript был именем Microsoft для их обратного инжиниринга клона Javascript.Теперь языки были объединены работой по стандартизации ECMA, в результате чего появился EcmaScript, хотя его все еще называют Javascript.

Но Microsoft необходимо поддерживать оба имени, потому что они хотят сохранить совместимость со старым написанным кодом.для древних версий IE, которые все еще используют старое имя JScript.

1 голос
/ 22 июля 2011

JScript и Javascript - это одно и то же в IE.JScript был переименован в JavaScript в IE9 из-за более стандартной (или лучшей, более функциональной) реализации.

1 голос
/ 22 июля 2011

Вы можете смело думать, что JScript такой же, как JavaScript, и вы не столкнетесь с какими-либо проблемами.

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

...