【发布时间】:2013-04-25 01:12:24
【问题描述】:
好的,所以我在处理我的 node.js 应用程序时在我的 Sublime 编辑器上安装了 Linter。它捕获的一件事是我应该始终使用 !== 将对象与 null 进行比较(我通常使用 != )。
所以我改变了它......但后来我注意到 !== 不起作用。
我有这种情况:
var x = null;
if (x !== null)
console.log('x is not equal to null');
当我使用 !== 时,控制台会打印该行,即使它显然不是真的。当我将其切换回 != 时,它表现正常。
所以我的问题是,为什么 linter 告诉我使用 !== 如果它没有做我想要的...
我知道我错过了什么。
更新 好的,所以它可能比我最初想象的要复杂一些。在我的真实代码中,我使用 !== 和 node.js GLOBAL 对象。
console.log('Global User: ' + GLOBAL.User);
if (GLOBAL.User != null)
{
console.log('User is not null');
}
即使 GLOBAL.User 为空,控制台行也会打印...
也许这个对象很特别?
更新 2
好的,所以在阅读了 cmets 并查看了我的代码之后,我了解到如果对象未定义而不是 null,则 !== 可能会出现问题(请参阅这篇文章:Why is null an object and what's the difference between null and undefined?)。
因此,在我的情况下,我的全局变量可能是未定义的、空的或充满数据的,具体取决于何时调用此方法。我将返回并更新我的代码,使其永远不会未定义,然后 !== 将始终如一地工作。
感谢您的帮助!
谢谢, 大卫
【问题讨论】:
-
无法重复您的实验。当我执行您的代码时,我的 x === null 。请注意, null == undefined 为真。 null === undefined 是假的。 JavaScript 很有趣!
-
它不应该打印那行。
-
您是否清除了控制台 (console.clear())?也许您正在查看以前的日志
-
您确定要比较的值是
null而不是undefined?
标签: javascript compare