[当我要确保定义了变量x
时,在使用它之前,我使用:
if (typeof x !== "undefined") {
// do stuff with x
}
但是我注意到其他人,例如在此question中,使用!==
代替!=
进行比较。我应该使用哪一个,为什么?
注:我意识到我可以正在使用!==
。问题是我是否应该(以及行为是否会有所不同)。
[如VLAZ的注释中所述,保证typeof
运算符返回字符串。如果将结果与另一个字符串进行比较,则==
和===
(或!=
和!==
)将执行完全相同的操作。
实际上,最好的方法是检查值是否为falsy
,并基于假值的MDN this is the list:
这是一个空字符串(字符串的长度为零)。 JavaScript中的字符串可以用双引号“”,单引号“或模板文字” ..
null null-没有任何值
因此,根据您的代码,您可以做的很简单:
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未定义”
所以在您的情况下,您只能使用!=
,因为您将比较string
与string
,并且可以避免检查变量是否已创建。
if (typeof x != "undefined") {
// do stuff with x
}