31

好的,所以我在处理我的 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

好的,所以在阅读了评论并查看了我的代码之后,我了解到 !== 如果对象未定义而不是 null 可能会出现问题(请参阅这篇文章:为什么 null 是一个对象以及 null 和未定义之间的区别? )。

因此,在我的情况下,我的全局变量可能是未定义的、空的或充满数据的,具体取决于何时调用此方法。我将返回并更新我的代码,使其永远不会未定义,然后 !== 将始终如一地工作。

谢谢您的帮助!


谢谢,大卫

4

3 回答 3

39

global.User的是undefined,不是null。使用==它们时,它们的计算结果相等,但===您要比较的项目必须是相同的类型。undefined有类型undefinednull有类型object

undefined并且null非常相似,但它们通常意味着两个非常不同的东西。通常undefined是当某物没有分配值时的结果,而null有一个值,并且该值被显式设置为“无”。

于 2013-04-25T01:29:28.197 回答
14

在 JavaScript 中唯一不等于自身的值是NaN. 如果null === nullfalse,那么你的 JavaScript 引擎有严重的问题;)

为确保条件语句写得好,请始终使用大括号。

var x = null;
if (x !== null) {
    console.log('x is not equal to null');
}
于 2013-04-25T01:20:31.783 回答
4

它更简单

var x = null;
    if (x) 6 
    if (!x) 7

结果是

undefined
7
于 2015-03-30T14:23:46.657 回答