64

我知道有两种方法可以确定 javascript 中变量是否存在而不是 null(false, empty):

1)if ( typeof variableName !== 'undefined' && variableName )

2)if ( window.variableName )

哪个更受欢迎,为什么?

4

8 回答 8

114

如果访问变量不会产生ReferenceError. 该表达式typeof variableName !== 'undefined'false适用于以下两种情况之一:

  • 变量未声明(即,没有var variableName在范围内),
  • 变量被声明并且它的值是(undefined即,变量的未定义

否则,比较结果为true

如果你真的想测试一个变量是否被声明,你需要尝试引用它所产生的catch任何内容:ReferenceError

var barIsDeclared = true; 
try{ bar; }
catch(e) {
    if(e.name == "ReferenceError") {
        barIsDeclared = false;
    }
}

如果您只想测试声明的变量的值是否既不是undefinednull,您可以简单地测试它:

if (variableName !== undefined && variableName !== null) { ... }

或者等效地,对 进行非严格相等检查null

if (variableName != null) { ... }

您的第二个示例和操作中的右手表达式都&&测试该值是否为“falsey”,即,它是否强制false在布尔上下文中。此类值包括nullfalse0和空字符串,并非您可能想要丢弃的所有值。

于 2013-05-23T16:35:12.953 回答
21

重要的是要注意“未定义”是一个完全有效的变量值。如果要检查变量是否存在,

if (window.variableName)

是更完整的检查,因为它正在验证变量是否已实际定义。但是,这仅在变量被保证为对象时才有用!此外,正如其他人所指出的,如果 variableName 的值为 false、0、'' 或 null,这也可能返回 false。

也就是说,这对于我们的日常目的通常是不够的,因为我们通常不希望有一个未定义的值。因此,您应该首先检查变量是否已定义,然后使用 typeof 运算符断言它不是未定义的,正如 Adam 指出的那样,除非变量确实未定义,否则不会返回 undefined。

if ( variableName  && typeof variableName !== 'undefined' )
于 2013-05-23T16:35:55.677 回答
12

如果要检查变量(比如 v)是否已定义且不为空:

if (typeof v !== 'undefined' && v !== null) {
    // Do some operation  
}

如果要检查所有虚假值,例如:undefined, null, '', 0, false:

if (v) {
   // Do some operation
}
于 2013-05-23T17:45:09.840 回答
5

我写答案只是因为我没有足够的声誉来评论apsillers接受的答案。我同意他的回答,但是

如果你真的想测试一个变量是否未声明,你需要捕获 ReferenceError ...

不是唯一的方法。一个人可以这样做:

this.hasOwnProperty("bar")

检查当前上下文中是否声明了变量bar 。(我不确定,但调用hasOwnProperty也可能比引发异常更快/更有效)这仅适用于当前上下文(不适用于整个当前范围)。

于 2017-01-13T18:19:56.213 回答
1
if ( typeof variableName !== 'undefined' && variableName )
//// could throw an error if var doesnt exist at all

if ( window.variableName )
//// could be true if var == 0

////further on it depends on what is stored into that var
// if you expect an object to be stored in that var maybe
if ( !!window.variableName )
//could be the right way

best way => see what works for your case
于 2013-05-23T16:42:13.073 回答
0

我发现这个更短更好:

    if(varName !== (undefined || null)) { //do something }
于 2017-03-03T14:21:55.040 回答
-1

if (variable)如果变量被保证是一个对象,或者如果 false、0 等被认为是“默认”值(因此等同于 undefined 或 null),则可以使用。

typeof variable == 'undefined'可以在指定的 null 对未初始化的变量或属性具有不同含义的情况下使用。此检查不会抛出,并且错误是未声明变量。

于 2013-05-23T16:37:09.637 回答
-1

你可以简单地做 if(variableName){console.log("Variable exist")}

于 2021-04-25T10:19:26.367 回答