检查 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"
所以在你的情况下你只能使用 !=
因为你将比较 string
与 string
并且你将避免检查变量是否已创建。
if (typeof x != "undefined") {
// do stuff with x
}
当我想确定一个变量 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"
所以在你的情况下你只能使用 !=
因为你将比较 string
与 string
并且你将避免检查变量是否已创建。
if (typeof x != "undefined") {
// do stuff with x
}