注意:根据 ECMAScript5.1,第15.1.1.3节,window.undefined是只读的。
原来,问题的原因是
object.x === undefined
如果“对象”中没有属性“ x”,则返回false。
我通过在两个Facebook函数中用规则相等替换严格相等来解决该问题:
FB.Sys.isUndefined = function(o) { return o == undefined;}; FB.Sys.containsKey = function(d, key) { return d[key] != undefined;};
这使事情对我有用,但似乎暗示着Facebook的JavaScript代码与我的JavaScript代码之间存在某种冲突。
是什么原因造成的?
提示:这是有据可查的undefined == null同时undefined !==null。这不是这里的问题。问题是我们如何得到undefined !== undefined。
undefined == null
undefined !==null
undefined !== undefined
事实证明,您可以将window.undefined设置为所需的任何值,并object.x!==undefined在object.x是真正的undefined时获得。就我而言,我无意中将undefined设置为null。
object.x!==undefined
看到这种情况的最简单方法是:
window.undefined = null; alert(window.xyzw === undefined); // shows false
当然,这不太可能发生。在我的情况下,该错误更加微妙,它等效于以下情况。
var n = window.someName; // someName expected to be set but is actually undefined window[n]=null; // I thought I was clearing the old value but was actually changing window.undefined to null alert(window.xyzw === undefined); // shows false