检查变量是否未定义的最佳实践

时间:2015-02-18 12:20:40

标签: javascript variables undefined

我在有关未定义变量的条件中遇到了一些问题。总结一下,检查变量是否未定义的最佳方法是什么?

我主要是在努力与

x === undefined

typeof x === 'undefined'

4 个答案:

答案 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。