如果JavaScript中未定义变量,最合适的测试方法是什么?

我见过几种可能的方法:

if (window.myVariable)

Or

if (typeof(myVariable) != "undefined")

Or

if (myVariable) // This throws an error if undefined. Should this be in Try/Catch?

当前回答

由于其他答案对我都没有帮助,我建议这样做。它在Internet Explorer 8中对我有效:

if (typeof variable_name.value === 'undefined') {
    // variable_name is undefined
}

其他回答

2020年更新

我倾向于检查类型(即,可以重新定义未定义的)的原因之一与ECMAScript 5的大量采用无关。另一个,你可以使用typeof来检查未声明变量的类型,总是小众的。因此,我现在建议在大多数情况下使用直接比较:

myVariable === undefined

2010年的原始答案

我喜欢使用typeof。当变量从未声明时,它将起作用,这与使用if.与==或==运算符或类型强制进行的任何比较不同(undefined,与null不同,也可能在ECMAScript 3环境中重新定义,这使得它不可靠,尽管现在几乎所有常见环境都符合ECMAScript5或更高版本)。

if (typeof someUndeclaredVariable == "undefined") {
    // Works
}

if (someUndeclaredVariable === undefined) { 
    // Throws an error
}
// x has not been defined before
if (typeof x === 'undefined') { // Evaluates to true without errors.
   // These statements execute.
}

if (x === undefined) { // Throws a ReferenceError

}
if (typeof foo == 'undefined') {
 // Do something
};

注意,在这种情况下不需要严格比较(!==),因为typeof将始终返回字符串。

由于其他答案对我都没有帮助,我建议这样做。它在Internet Explorer 8中对我有效:

if (typeof variable_name.value === 'undefined') {
    // variable_name is undefined
}

我知道检查undefined最可靠的方法是使用void 0。

这与较新和较旧的浏览器都兼容,并且不能像window那样被覆盖。在某些情况下,未定义的浏览器可以被覆盖。

if( myVar === void 0){
    //yup it's undefined
}