注意:根据ECMAScript5.1,第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
返回假是因为对象中没有x字段吗? - Grace Huangwindow.undefined
只读之前,void(0)
被认为是获取未定义值的标准超安全方式,如果您不想信任环境的undefined
变量。MDN - snarf