Javascript:比较为null - !== vs!=

时间:2013-04-25 01:12:24

标签: javascript compare

好的,所以我在使用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,则会出现问题(请参阅此帖子:Why is null an object and what's the difference between null and undefined?)。

所以在我的情况下,我的全局变量可能是,取决于调用此方法的时间,未定义,空或满数据。我将返回并更新我的代码,以便它永远不会被定义,然后!==将始终如一地工作。

感谢您的帮助!


谢谢, 大卫

3 个答案:

答案 0 :(得分:32)

您的global.Userundefined,而不是null。使用==时,他们评估为相等,但使用===时,您要比较的项目必须是同一类型。 undefined类型为undefinednull类型为object

undefinednull非常相似,但它们通常意味着两种截然不同的东西。通常undefined是某些内容没有分配给它的结果,而null有一个值,而值显式设置为"没有"。

答案 1 :(得分:12)

JavaScript中唯一不相等的值是NaN。如果null === nullfalse,则您的JavaScript引擎存在严重问题;)

要确保您的条件语句写得很好,请始终使用大括号。

var x = null;
if (x !== null) {
    console.log('x is not equal to null');
}

答案 2 :(得分:4)

更简单

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

结果是

undefined
7