测试JavaScript中是否未定义变量的最合适方法是什么?我已经看到了几种可能的方法:
if (window.myVariable)
要么
if (typeof(myVariable) != "undefined")
要么
if (myVariable) //This throws an error if undefined. Should this be in Try/Catch?
测试JavaScript中是否未定义变量的最合适方法是什么?我已经看到了几种可能的方法:
if (window.myVariable)
要么
if (typeof(myVariable) != "undefined")
要么
if (myVariable) //This throws an error if undefined. Should this be in Try/Catch?
就个人而言,我始终使用以下内容:
var x;
if( x === undefined) {
//Do something here
}
else {
//Do something else here
}
在所有现代浏览器(JavaScript 1.8.5或更高版本)中,window.undefined属性都是不可写的。从Mozilla的文档中:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined,我看到了:使用typeof()的一个原因是,如果出现以下情况,它不会引发错误:该变量尚未定义。
我更喜欢有使用的方法
x === undefined
因为它失败了并且炸毁了我的脸,而不是在以前没有声明x的情况下默默地通过/失败。这提醒我未声明x。我相信应该声明JavaScript中使用的所有变量。
在这篇文章中我读到这样的框架Underscore.js使用此功能:
function isUndefined(obj){
return obj === void 0;
}
您可以这样使用typeof
:
if (typeof something != "undefined") {
// ...
}
如果未定义,则它将不等于包含字符“ undefined”的字符串,因为该字符串不是未定义的。
您可以检查变量的类型:
if (typeof(something) != "undefined") ...
有时,您甚至不必检查类型。如果设置后变量的值不能为假(例如,如果它是一个函数),则可以对变量进行求值。例:
if (something) {
something(param);
}
使用typeof
是我的偏爱。在从未声明过变量的情况下它将起作用,这与与==
或===
运算符进行任何比较,或使用进行类型强制转换不同if
。(undefined
不同于null
,也可能会在ECMAScript 3环境中重新定义,因此比较起来不可靠,尽管现在几乎所有常见环境都符合ECMAScript 5或更高版本)。
if (typeof someUndeclaredVariable == "undefined") {
// Works
}
if (someUndeclaredVariable === undefined) {
// Throws an error
}
I use it as a function parameter and exclude it on function execution that way I get the "real" undefined. Although it does require you to put your code inside a function. I found this while reading the jQuery source.
Of course you could just use
typeof
though. But all my code is usually inside a containing function anyways, so using this method probably saves me a few bytes here and there.