好了,我在我的node.js应用程序上工作时在我的Sublime编辑器上安装了Linter。它抓到的一件东西说我应该一直用!==来比较一个对象和null(我通常使用!=)。
所以我改了...但后来我注意到!==不工作。
更新好的,所以它可能比我最初想象的要复杂一点。在我使用的真实的代码中!==使用node.js GLOBAL对象。
console.log('Global User: ' + GLOBAL.User);
if (GLOBAL.User != null)
{
console.log('User is not null');
}
即使GLOBAL.User为null,控制台行也会打印...
也许这个东西很特别?
好了,在阅读了注解并查看了我的代码之后,我已经学会了!如果对象是undefined而不是null,==可能会有问题(请参阅这篇文章:Why is null an object and what's the difference between null and undefined?)。
所以在我的例子中,我的全局变量可能是undefined,null,或者充满数据,这取决于这个方法被调用的时间。我将回去更新我的代码,这样它就永远不会是未定义的,然后!==会一直工作。
3条答案
按热度按时间zf2sa74q1#
您的
global.User
是undefined
,而不是null
。当使用==
时,它们的计算结果是相等的,但是使用===
时,您正在比较的项目需要是相同的类型。undefined
的类型为undefined
,null
的类型为object
。undefined
和null
非常相似,但它们通常意味着两个非常不同的东西。通常情况下,undefined
是没有赋值的结果,而null
有一个值,并且该值被显式设置为“无”。thtygnil2#
JavaScript中唯一不等于自身的值是
NaN
。如果null === null
是false
,那么你的JavaScript引擎有严重的问题;)为了确保你的条件语句写得很好,总是使用大括号。
wpcxdonn3#
就更简单了
结果是