有人可以指出 ECMAScript 第三版在当今浏览器中的实现差异吗? (Chrome、Safari、IE8、FF)
使用 ECMAScript 3 标准(而不是 FF 和 IE 对 JScript 和 JavaScript 的扩展)时我们安全吗?
嗯,当然存在实现错误,我必须处理的最严重的是 JScript(该标准的 Microsoft 实现),例如:
FunctionExpressions 的标识符只能在函数本身的内部范围内访问:
(function foo() {
alert(typeof foo); // "function"
})();
alert(typeof foo); // should be "undefined", on IE shows "function"
该错误存在于所有当前 IE 版本中,刚刚在 IE9 预览版上修复。
实际上更糟糕的是,它创建了两个函数对象,例如:
var foo = function bar() {};
if (typeof bar != 'undefined') { // the case of IE
alert(foo === bar); // false!!!
}
另一个众所周知的 JScript 错误是“不要枚举错误”,如果其作用域链中的对象包含不可枚举的属性(具有{ DontEnum }
属性),如果该属性在其他对象上被隐藏,它将保持不可枚举状态,例如:
var dontEnumBug = {toString:'foo'}.propertyIsEnumerable('toString');
它将评估为false
在 IE 上,这会导致使用时出现问题for-in
语句,因为属性不会被访问。
JScript 是问题最多的实现——尽管 IE9 实现确实变得更好了——。
推荐文章:
-
JScript deviations from ES3pdf
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)