当检查Javascript中的undefined'ness时,我应该使用!=或!==?

问题描述 投票:-2回答:2

[当我要确保定义了变量x时,在使用它之前,我使用:

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

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

注:我意识到我可以正在使用!==。问题是我是否应该(以及行为是否会有所不同)。

javascript identity equality thunderbird
2个回答
2
投票

[如VLAZ的注释中所述,保证typeof运算符返回字符串。如果将结果与另一个字符串进行比较,则=====(或!=!==)将执行完全相同的操作。


0
投票

实际上,最好的方法是检查值是否为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的情况下,这些情况才会起作用,否则您将出现以下错误:

“未捕获的ReferenceError:x未定义”

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

if (typeof x != "undefined") {
    // do stuff with x
}
© www.soinside.com 2019 - 2024. All rights reserved.