【问题标题】:Comparing to null - !== vs != in JavaScript与 JavaScript 中的 null - !== vs != 进行比较
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 所以...如果一个对象可能是 undefined 或 null 取决于具体情况,使用 == 而不是 === 更安全?
  • @David 通常我会避免歧义并确保将其初始化为null。与任何情况一样,您需要考虑的可能因素越少,就越容易对问题进行推理。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    更简单

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

    结果是

    undefined
    7
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-04
      • 2022-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多