注意:根据ECMAScript5.1,第15.1.1.3节,window.undefined是只读的。
最近,我将Facebook Connect与Tersus集成在一起时,最初Invalid Enumeration Value
以及Handler already exists
在尝试调用Facebook API函数时收到了错误消息。
原来,问题的原因是
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
while undefined !== null
。这不是这里的问题。问题是我们如何得到undefined !== undefined
。
事实证明,您可以将window.undefined设置为所需的任何值,并object.x !== undefined
在object.x是真正的 undefined时获得。就我而言,我无意中将undefined设置为null。
看到这种情况的最简单方法是:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句