Ну, конечно, есть ошибки реализации, самые серьезные из которых мне приходилось иметь дело с JScript, реализацией стандарта Microsoft, например:
Идентификатор FunctionExpressions должен быть доступен только во внутренней области самой функции:
(function foo() {
alert(typeof foo); // "function"
})();
alert(typeof foo); // should be "undefined", on IE shows "function"
Эта ошибка присутствует во всех текущих версиях IE, только что она была исправлена в IE9 Previews.
А на самом деле еще хуже, он создает два функциональных объекта, например:
var foo = function bar() {};
if (typeof bar != 'undefined') { // the case of IE
alert(foo === bar); // false!!!
}
Еще одна известная ошибка JScript - это «Ошибка DontEnum» , если объект в его цепочке областей действия содержит свойство, которое не перечисляется (имеет атрибут { DontEnum }
), если свойство затенено на другой объект, он останется не перечисляемым, например:
var dontEnumBug = {toString:'foo'}.propertyIsEnumerable('toString');
В IE он оценивается как false
, это вызывает проблемы при использовании оператора for-in
, поскольку свойства не будут посещаться.
JScript - это реализация, которая имеет наибольшее количество проблем - хотя реализация IE9 становится действительно лучше -.
Рекомендуемая статья: