如何检测未声明与已声明但未初始化的变量

时间:2016-06-04 04:56:26

标签: javascript

此JavaScript中有两个变量(从技术上讲,只有a是变量,b不存在):

function func() {
    var a;// a is declared but uninitialised
    //var b; //b is commented out so b does not exist
}

如何从a告诉b

他们都是typeof === 'undefined'

如果a位于全局范围内,您可以尝试'a' in window告诉它已声明但未初始化。但如果它在功能范围内呢?

如何判断JavaScript变量是已声明但未初始化根本不存在

3 个答案:

答案 0 :(得分:2)

您可以使用try / catch查看是否会引发异常。除了使用ReferenceError时,不存在的变量将抛出typeof

工作示例:



function func() {
    var a;
    //var b;
    try {
        a;
    }
    catch (ex) {
        console.log('a does not exist');
    }
    try {
        b;
    }
    catch (ex) {
        console.log('b does not exist');
    }
}
func();




格式良好的代码不应该真的依赖于这样的东西。

答案 1 :(得分:1)

我同意最后两张海报,因为b为undefined,b为参考错误。尝试捕获可能是唯一的方法。我在你的场景中运行了几个逻辑测试,并且当它不在范围内时总是抛出错误。在小提琴中,除了一个之外的所有行都会出错。

为了证明这一点,一次取消注释一行并运行小提琴。

Fiddle

O(1)

好问题,因为我认为对不存在的var的检查也应该是未定义的。我在镀铬51.0.2704.79米测试。

我相信结果在逻辑上是正确的。 b甚至不存在没有名称b,因此不能被引用。

希望这有帮助

答案 2 :(得分:0)

你可以try ... catch,如果它抛出异常,那么变量不会被初始化。

var a;

try {
    var value = a === b; // for example.
} catch(error) {
    console.log('b is not declared');
}

或者您可以创建一个对象并检查它是否具有相应的属性:

var object = {};
object.a = undefined; // declared, not initialized

var hasA = 'a' in object; // or object.hasOwnProperty('a');
if(hasA) console.log('a is declared');

var hasB = 'b' in object; // or object.hasOwnProperty('b');
if(hasB) {
    console.log('B is declared');
} else console.log('B is not declared.');