检查一个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
。 这些值包括null
, false
, 0
和空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值,如: undefined
, null
, ''
, 0
, false
:
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); }