检查变量是否未定义的最佳实践
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)
。不过,它对于同构代码而言不可移植。)
我在我的条件中遇到了一些关于未定义变量的问题。总结一下,检查变量是否未定义的最佳方法是什么?
我主要是在挣扎
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)
。不过,它对于同构代码而言不可移植。)