Лично я думал, что диалект 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» в обоих случаях.