有人能指出在今天的浏览器中ECMAScript第3版的实施差异吗? (Chrome,Safari,IE8,FF)
使用ECMAScript 3标准时是否安全(而不是FF和IE对JScript和JavaScript的扩展)?
答案 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实现变得越来越好 - 。
推荐文章: