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

Best practice of checking if variable is undefined

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

我主要是在挣扎

x === undefined

typeof x === 'undefined'
x === undefined

如果未声明变量则不起作用。此 returns true 仅当变量已声明但未定义时。

更好用

typeof x === 'undefined'

您可以使用其中任何一个。 如果你想检查一个变量是未定义的还是空的,你可以使用:

x == null

如果 x 未定义或为空,则结果为真。

您可以使用两种方法来检查值是否为 undefined。但是,您需要注意一些细微差别。

第一种方法使用严格比较 === 运算符与 undefined type:

进行比较
var x;
// ...

x === undefined; // true

这将按预期工作 如果变量已声明但未定义,即具有 undefined 值,这意味着您在某处有 var x你的代码,但它从未被分配过一个值。所以根据定义,它是 undefined

但是如果变量 不是 声明的 var 关键字,上面的代码将抛出引用错误:

x === undefined // ReferenceError: x is not defined 

在这种情况下,typeof比较更可靠:

typeof x == 'undefined' // true

这在两种情况下都可以正常工作:如果变量从未被赋值,并且它的值实际上是 undefined.

我想两者都有,具体取决于您测试的是什么?如果它是 属性,我总是使用 x === undefined,因为它更清晰(而且看起来更快)。

正如其他人所说,如果未声明 x,x === undefined 将不起作用。就个人而言,我发现这是一个更好的使用它的理由,因为通常我根本不应该检查是否声明了一个变量——这通常是编码错误的标志。

我看过很多其他版本的测试参数 — f = function(x) {if (typeof x == 'undefined') …} — 如果我正在审查这样的代码,我会告诉他们更改它。我们确实知道变量已声明,养成这样编写它的习惯会增加您浪费时间追逐拼写错误的机会。

主要的例外是当您尝试检查组件或库是否已正确加载或初始化时。 if (typeof jQuery == 'undefined') … 有道理。但从中期来看,所有这些都应该成为模块,在这种情况下,我认为 typeof 测试应该被淘汰,因为它是有害的。

(另外,就我个人而言,对于这种情况,我也更喜欢 if (window.jQuery === undefined)。不过,它对于同构代码而言不可移植。)