JavaScript:未定义!==未定义?

尤瓦·布罗尼基(Youval Bronicki):

注意:根据ECMAScript5.1,第15.1.1.3节,window.undefined是只读的。

  • 现代浏览器正确地实现了这一点。例如:Safari 5.1,Firefox 7,Chrome 20等。
  • Undefined仍可在以下位置更改:Chrome 14,...

最近,我Facebook ConnectTersus集成在一起时,最初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 == nullwhile undefined !== null这不是这里的问题。问题是我们如何得到undefined !== undefined

尤瓦·布罗尼基(Youval Bronicki):

事实证明,您可以将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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章