Есть ли еще различия в реализации ECMAScript 3 в основных браузерах? - PullRequest
7 голосов
/ 09 сентября 2010

Может ли кто-нибудь указать на различия в реализации ECMAScript 3rd edition в современных браузерах? (Chrome, Safari, IE8, FF)

Безопасны ли мы при использовании стандартов ECMAScript 3 (а не расширений, которые FF и IE имеют для JScript и JavaScript)?

1 Ответ

8 голосов
/ 09 сентября 2010

Ну, конечно, есть ошибки реализации, самые серьезные из которых мне приходилось иметь дело с 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 становится действительно лучше -.

Рекомендуемая статья:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...