我知道有两种方法可以确定 javascript 中变量是否存在而不是 null(false, empty):
1)if ( typeof variableName !== 'undefined' && variableName )
2)if ( window.variableName )
哪个更受欢迎,为什么?
我知道有两种方法可以确定 javascript 中变量是否存在而不是 null(false, empty):
1)if ( typeof variableName !== 'undefined' && variableName )
2)if ( window.variableName )
哪个更受欢迎,为什么?
如果访问变量名不会产生ReferenceError
. 该表达式typeof variableName !== 'undefined'
仅 false
适用于以下两种情况之一:
var variableName
在范围内),或undefined
即,变量的值未定义)否则,比较结果为true
。
如果你真的想测试一个变量是否被声明,你需要尝试引用它所产生的catch
任何内容:ReferenceError
var barIsDeclared = true;
try{ bar; }
catch(e) {
if(e.name == "ReferenceError") {
barIsDeclared = false;
}
}
如果您只想测试声明的变量的值是否既不是undefined
也null
,您可以简单地测试它:
if (variableName !== undefined && variableName !== null) { ... }
或者等效地,对 进行非严格相等检查null
:
if (variableName != null) { ... }
您的第二个示例和操作中的右手表达式都&&
测试该值是否为“falsey”,即,它是否强制false
在布尔上下文中。此类值包括null
、false
、0
和空字符串,并非您可能想要丢弃的所有值。
重要的是要注意“未定义”是一个完全有效的变量值。如果要检查变量是否存在,
if (window.variableName)
是更完整的检查,因为它正在验证变量是否已实际定义。但是,这仅在变量被保证为对象时才有用!此外,正如其他人所指出的,如果 variableName 的值为 false、0、'' 或 null,这也可能返回 false。
也就是说,这对于我们的日常目的通常是不够的,因为我们通常不希望有一个未定义的值。因此,您应该首先检查变量是否已定义,然后使用 typeof 运算符断言它不是未定义的,正如 Adam 指出的那样,除非变量确实未定义,否则不会返回 undefined。
if ( variableName && typeof variableName !== 'undefined' )
如果要检查变量(比如 v)是否已定义且不为空:
if (typeof v !== 'undefined' && v !== null) {
// Do some operation
}
如果要检查所有虚假值,例如:undefined
, null
, ''
, 0
, false
:
if (v) {
// Do some operation
}
我写答案只是因为我没有足够的声誉来评论apsillers接受的答案。我同意他的回答,但是
如果你真的想测试一个变量是否未声明,你需要捕获 ReferenceError ...
不是唯一的方法。一个人可以这样做:
this.hasOwnProperty("bar")
检查当前上下文中是否声明了变量bar 。(我不确定,但调用hasOwnProperty也可能比引发异常更快/更有效)这仅适用于当前上下文(不适用于整个当前范围)。
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(varName !== (undefined || null)) { //do something }
if (variable)
如果变量被保证是一个对象,或者如果 false、0 等被认为是“默认”值(因此等同于 undefined 或 null),则可以使用。
typeof variable == 'undefined'
可以在指定的 null 对未初始化的变量或属性具有不同含义的情况下使用。此检查不会抛出,并且错误是未声明变量。
你可以简单地做
if(variableName){console.log("Variable exist")}