检查一个variables是否存在于JavaScript中

我知道有两种方法来确定是否存在一个variables,而不是在javascript中为空(false,空):

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

2) if ( window.variableName )

哪一个更受欢迎?为什么?

如果访问variables名称将声明一个variables不会产生ReferenceError。 如果typeof variableName !== 'undefined'的expression式仅在以下两种情况之一中为false

  • 该variables没有被声明(即没有var variableName在范围内),或
  • variables被声明并且其值是undefined (即variables的 没有被定义

否则,比较评估为true

如果你真的想testing一个variables是否被声明,你需要catch任何ReferenceError它的ReferenceError

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

如果你只是想testing一个声明variables的值是不是undefined也是null ,你可以简单地testing它:

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

或者等价地,对null进行非严格的等式检查:

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

&&操作中,第二个例子和右边的expression式都会testing这个值是否为“falsey”,也就是说,如果它在布尔上下文中强制为false 。 这些值包括nullfalse0和空string,并非所有这些都可能要放弃。

值得注意的是,“未定义”对于一个variables来说是一个非常有效的值。 如果你想检查variables是否存在,

 if (window.variableName) 

是一个更完整的检查,因为它正在validationvariables是否已经被定义。 但是,这只有在variables保证是一个对象时才有用! 另外,正如其他人指出的那样,如果variableName的值是false,0,''或null,那么也可以返回false。

这就是说,这对于我们的日常用途来说通常是不够的,因为我们通常不想有一个不确定的价值。 因此,你应该首先检查variables是否被定义,然后用typeof运算符声明它不是未定义的,正如Adam所指出的那样,除非variables确实是未定义的,否则不会返回undefined。

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

如果你想检查一个variables(比如说v)是否已经被定义,而不是null:

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

如果你想检查所有的falsy值,如: undefinednull''0false

 if (v) { // Do some operation } 

我只是写了一个答案,因为我没有足够的声誉来评论Apsillers公认的答案。 我同意他的回答,但是

如果你真的想testing一个variables是否声明,你需要捕捉ReferenceError …

不是唯一的方法。 人们可以做的只是:

 this.hasOwnProperty("bar") 

检查当前上下文中是否有variables声明。 (我不确定,但调用hasOwnProperty也可能比引发一个exception更快/更有效)这只适用于当前上下文(而不适用于整个当前范围)。

 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 

if (variable)可以被使用,如果variables保证是一个对象,或者如果假,0等被认为是“默认”值(因此相当于未定义或null)。

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

我发现这个更短,更好:

  if(varName !== (undefined || null)) { //do something } 

其他时候你必须把它作为一个ReferenceErrorexception处理。

  try { //user variable console.log(varName); }catch(error){ //variable is not defined console.log(error); }