Javascript 如何检查变量是否未定义(声明但未赋值)或未声明(不存在)?
两者都会导致Javascript 如何检查变量是否未定义(声明但未赋值)或未声明(不存在)?,javascript,Javascript,两者都会导致“未定义”。。。比如说 var a; typeof blablabl; //"undefined"; typeof a; //"undefined"; 检查变量是否未定义或变量是否未声明的默认方法是什么 var a = a || 3; 仅当变量已存在于作用域中时才起作用。如果可以硬编码变量名称,则可以测试某些变量(例如b)的初始化,而无需按以下方式修改其值 (function () { "use strict"; var foo; try {
“未定义”
。。。比如说
var a;
typeof blablabl; //"undefined";
typeof a; //"undefined";
检查变量是否未定义或变量是否未声明的默认方法是什么
var a = a || 3;
仅当变量已存在于作用域中时才起作用。如果可以硬编码变量名称,则可以测试某些变量(例如
b
)的初始化,而无需按以下方式修改其值
(function () {
"use strict";
var foo;
try {
foo = b;
console.log('b', ' is initialised');
} catch(e) {
if (e instanceof ReferenceError)
console.log('b', ' is not initialised');
}
}());
还请注意,以下代码不会抛出错误
(function () {
"use strict";
var foo;
var foo;
}());
因此,如果您“不确定”,只需再次执行
var
。刚刚测试了我的建议,似乎有效:
"use strict";
try {
b = 3;
} catch(e) {
console.log("Caught it:", e);
// Caught it: ReferenceError: assignment to undeclared variable b
}
如果尚未定义,则(a===未定义)将返回true
(a==undefined)将在未定义a或a=null时返回true
如果要检查变量是否存在,可以检查此变量的范围(如果适用):
var exists=(this.hasOwnProperty('a'))?'a存在于当前作用域“:“a不存在”
“严格使用”
和试试
-catch
给它赋值?是的,我希望看到一些不那么杂乱的东西,但是如果这是唯一的方法,那么我可以使用它。如果可能的话,你可以加下划线并使用u.isUndefined(myVar);这种不给被测试者赋值的技巧确实很聪明!有没有一个选项可以获取当前范围并测试它是否hasOwnProperty()
或类似的内容?@Serge你可以。调用(this)
,但我不认为测试属性是否存在有什么问题,我们已经有很多方法可以做到这一点。添加了一个exists检查,正如下面Serge评论所建议的那样。(函数(){var foo;return(函数(){returnthis.hasOwnProperty('foo');}();}());//false