检查 Javascript 中的未定义性时,我应该使用 != 还是 !==?

When checking for undefined'ness in Javascript, should I use != or !==?

当我想确定一个变量 x 被定义时,在使用它之前,我使用:

if (typeof x !== "undefined") {
    // do stuff with x
}

但我注意到其他人,例如在此 question 中,使用 !== 而不是 != 进行比较。我应该使用哪一个,为什么?

注意:我知道我可以使用!==。问题是我是否应该(以及行为上是否会有任何差异)。

正如 VLAZ 在评论中指出的那样,typeof 运算符保证 return 一个字符串。如果将结果与另一个字符串进行比较,那么 =====(或 !=!==)将做完全相同的事情。

实际上,最好的方法是检查值是否为 falsy,并基于 MDN this is the list 的虚假值:

  • false 关键字 false
  • 0 数字零
  • 0n BigInt 用作布尔值时,遵循与数字相同的规则。 0n 是假的。 "", '', ``
  • 这是一个空字符串(字符串的长度为零)。 JavaScript 中的字符串可以用双引号 ""、单引号 '' 或模板文字 ``.

  • 定义
  • null null - 没有任何值

  • undefined undefined - 原始值
  • NaN NaN - 不是数字

所以根据您的代码,您可以做的很简单:

if (!x) { // check for all the falsy values.
    // do stuff with x
}

另一方面,你要求!=!==的区别,基本上举一些例子你可以看到区别:

0 == false   // true, because false is equivalent of 0

0 === false  // false, because both operands are of different type

2 == "2"     // true, auto type coercion, string converted into number

2 === "2"    // false, since both operands are not of same type

如@VLAZ 评论所述,这些情况只有在定义了变量 x 时才有效,否则会出现以下错误:

"Uncaught ReferenceError: x is not defined"

所以在你的情况下你只能使用 != 因为你将比较 stringstring 并且你将避免检查变量是否已创建。

if (typeof x != "undefined") {
    // do stuff with x
}