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

Dav*_*vid 27 javascript compare

好的,所以我在使用node.js应用程序时在我的Sublime编辑器上安装了Linter.它捕获的一件事说我应该总是使用!==将一个对象比较为null(我通常使用!=).

所以我改变了......但后来我注意到了!==没有用.

我有这种情况:

var x = null;
if (x !== null)
    console.log('x is not equal to null');
Run Code Online (Sandbox Code Playgroud)

当我使用!==控制台打印那条线时,即使它显然不是真的.当我把它切换回来时!它表现正常.

所以我的问题是,为什么linter告诉我要使用!==如果它没有做我想要它...

我知道我错过了什么.


更新 好的,所以它可能比我原先想象的要复杂一点.在我的真实代码中,我使用了!==与node.js GLOBAL对象.

console.log('Global User: ' + GLOBAL.User);

if (GLOBAL.User != null)
{
    console.log('User is not null');
}
Run Code Online (Sandbox Code Playgroud)

即使GLOBAL.User为空,控制台行也会打印...

也许这个对象很特别?



更新2

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

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

谢谢您的帮助!


谢谢,大卫

log*_*yth 33

global.Userundefined,不是null.使用时,==它们评估为相等,但是===您要比较的项目需要是相同的类型.undefined有类型undefinednull类型object.

undefined并且null非常相似,但它们通常意味着两种截然不同的东西.通常undefined是某些东西没有赋值给它的结果,而是null有一个值,并且该值明确地设置为"nothing".

  • @David通常我会避免歧义,并确保它被初始化为"null".与任何情况一样,您需要考虑的几个可能因素,更容易推理问题. (5认同)

pla*_*alx 12

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

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

var x = null;
if (x !== null) {
    console.log('x is not equal to null');
}
Run Code Online (Sandbox Code Playgroud)