在主流浏览器中是否还存在ECMAScript 3实现差异?

时间:2010-09-09 17:59:00

标签: javascript cross-browser

有人能指出在今天的浏览器中ECMAScript第3版的实施差异吗? (Chrome,Safari,IE8,FF)

使用ECMAScript 3标准时是否安全(而不是FF和IE对JScript和JavaScript的扩展)?

1 个答案:

答案 0 :(得分:8)

嗯,当然还有实现错误,我必须处理的最严重的问题是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 Bug",如果其作用域链中的对象包含一个不可枚举的属性(具有{ DontEnum }属性),如果该属性被遮蔽在其他对象上,它将保持不可枚举,例如:

var dontEnumBug = {toString:'foo'}.propertyIsEnumerable('toString');

它将在IE上评估为false,这会在使用for-in语句时导致问题,因为不会访问属性。

JScript是具有最多问题的实现 - 尽管IE9实现变得越来越好 - 。

推荐文章: