我在有关未定义变量的条件中遇到了一些问题。总结一下,检查变量是否未定义的最佳方法是什么?
我主要是在努力与
x === undefined
和
typeof x === 'undefined'
答案 0 :(得分:9)
您可以使用两种方法检查值是否为undefined
。但是,您需要注意的细微差别。
第一种方法使用严格比较===
运算符与undefined
type进行比较:
var x;
// ...
x === undefined; // true
如果变量已声明但未定义,即 {<1}},这将按预期工作 ,这意味着您的代码中某处有undefined
,但是它从未被赋予价值。所以它的定义是var x
。
但是如果变量不是用undefined
关键字声明上面代码将抛出引用错误:
var
在这种情况下,x === undefined // ReferenceError: x is not defined
比较更可靠:
typeof
在两种情况下都能正常工作:如果从未为变量赋值,并且其值实际为typeof x == 'undefined' // true
。
答案 1 :(得分:1)
x === undefined
如果未声明变量,则不起作用。仅当声明了变量但未定义变量时,才会返回true
。
最好使用
typeof x === 'undefined'
答案 2 :(得分:1)
我想两者都取决于你在测试什么?如果它是属性,我总是使用x === undefined
,因为它更清晰(而且看起来更快)。
正如其他人所说,如果没有声明x,x === undefined
将不起作用。就个人而言,我发现使用它的一个更好的理由,因为通常我不应该检查变量是否被声明 - 这通常是编码错误的标志。
我已经看到很多用于测试参数的其他版本 - f = function(x) {if (typeof x == 'undefined') …}
- 如果我正在代码审查这样的代码,我会告诉他们改变它。我们知道这个变量已经被宣布了,并养成以这种方式编写变量的习惯,这增加了你浪费时间追逐拼写错误的机会。
主要的例外是当您尝试检查组件或库是否已正确加载或初始化时。 if (typeof jQuery == 'undefined') …
是有道理的。但从中期来看,所有这些都应该成为模块,在这种情况下,我认为测试类型应该被淘汰为有害的。
(另外,就个人而言,我也更喜欢if (window.jQuery === undefined)
。但是,对于同构代码,它不可移植。)
答案 3 :(得分:0)
您可以使用其中任何一种。 如果您想检查变量是否未定义或为null,您可以使用:
x == null
如果x未定义或为空,则结果为true。