我知道在javascript中有两种方法可以确定变量是否存在而不是null(false,empty):
1) if ( typeof variableName !== 'undefined' && variableName )
2) if ( window.variableName )
哪一个更受欢迎,为什么?
aps*_*ers 106
如果访问变量名称将不会生成变量,则声明变量ReferenceError.表达式typeof variableName !== 'undefined'只会出现 false在以下两种情况中的一种:
var variableName范围内没有),或undefined(即,变量的值是未定义)否则,比较评估为true.
如果你真的想测试一个变量是否被声明,你需要通过尝试引用它来产生catch任何变量ReferenceError:
var barIsDeclared = true;
try{ bar; }
catch(e) {
if(e.name == "ReferenceError") {
barIsDeclared = false;
}
}
Run Code Online (Sandbox Code Playgroud)
如果您只想测试声明的变量的值是否既不undefined是null,那么您只需测试它:
if (variableName !== undefined && variableName !== null) { ... }
Run Code Online (Sandbox Code Playgroud)
或者等效地,使用非严格的相等性检查null:
if (variableName != null) { ... }
Run Code Online (Sandbox Code Playgroud)
操作中的第二个示例和右手表达式都&&测试值是否为"falsey",即它是否false在布尔上下文中强制执行.这些值包括null,false,0,和空字符串,并不是所有的你可能要放弃.
Dav*_*d L 20
值得注意的是,'undefined'是一个完全有效的值,用于保存变量.如果要检查变量是否存在,
if (window.variableName)
Run Code Online (Sandbox Code Playgroud)
是一个更完整的检查,因为它验证变量实际上已被定义.但是,这仅在保证变量是对象时才有用!另外,正如其他人所指出的,如果variableName的值为false,0,''或null,则也可能返回false.
也就是说,这对我们的日常用途来说通常是不够的,因为我们通常不希望有不确定的价值.因此,您应首先检查变量是否已定义,然后使用typeof运算符断言它未定义,正如Adam指出的那样,除非变量确实未定义,否则不会返回undefined.
if ( variableName && typeof variableName !== 'undefined' )
Run Code Online (Sandbox Code Playgroud)
Fiz*_*han 10
如果要检查是否已定义变量(例如v)且不是null:
if (typeof v !== 'undefined' && v !== null) {
// Do some operation
}
Run Code Online (Sandbox Code Playgroud)
如果你要检查所有falsy值,如:undefined,null,'',0,false:
if (v) {
// Do some operation
}
Run Code Online (Sandbox Code Playgroud)
我正在写一个答案只是因为我没有足够的声誉来评论apsillers接受的答案.我同意他的回答,但是
如果你真的想测试变量是否未声明,你需要捕获ReferenceError ...
不是唯一的方法.一个人可以做到:
this.hasOwnProperty("bar")
Run Code Online (Sandbox Code Playgroud)
检查当前上下文中是否声明了变量条.(我不确定,但调用hasOwnProperty也可能比引发异常更快/更有效)这仅适用于当前上下文(不适用于整个当前范围).
| 归档时间: |
|
| 查看次数: |
111405 次 |
| 最近记录: |