【发布时间】:2010-10-21 02:07:33
【问题描述】:
注意:根据ECMAScript5.1, section 15.1.1.3,window.undefined 是只读的。
- 现代浏览器正确地实现了这一点。例如:Safari 5.1、Firefox 7、Chrome 20 等。
- Undefined 在 Chrome 14 中仍然可以更改,...
当我最近将Facebook Connect 与Tersus 集成时,我最初在尝试调用Facebook API 函数时收到了错误消息Invalid Enumeration Value 和Handler already exists。
原来问题的原因是
object.x === undefined
当 'object' 中没有属性 'x' 时返回 false。
我通过在两个 Facebook 函数中用常规相等替换严格相等来解决这个问题:
FB.Sys.isUndefined = function(o) { return o == undefined;};
FB.Sys.containsKey = function(d, key) { return d[key] != undefined;};
这对我来说是可行的,但似乎暗示 Facebook 的 JavaScript 代码和我自己的代码之间存在某种冲突。
这是什么原因造成的?
提示:有据可查的是undefined == null 而undefined !== null。这不是这里的问题。问题是我们怎么会得到undefined !== undefined。
【问题讨论】:
-
有趣,我刚刚在我的控制台中尝试过。
var a = {}; a.b === undefined //true。您确定您的object.x === undefined返回 false 是因为对象中没有字段 x 吗? -
" 根据 ECMAScript5.1 第 15.1.1.3 节,window.undefined 是只读的。" - 霍雷,因为在以前的版本中,有人可以全局覆盖
undefined,一切都会中断:( -
在
window.undefined是只读的之前,void(0)被认为是标准的额外安全方法,如果你不想相信你是环境的@ 987654337@ 变量。 MDN
标签: javascript