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