一尘不染

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

javascript

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

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

原来,问题的原因是

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


阅读 252

收藏
2020-05-01

共1个答案

一尘不染

事实证明,您可以将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
2020-05-01