此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变量是已声明但未初始化或根本不存在?
答案 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为参考错误。尝试捕获可能是唯一的方法。我在你的场景中运行了几个逻辑测试,并且当它不在范围内时总是抛出错误。在小提琴中,除了一个之外的所有行都会出错。
为了证明这一点,一次取消注释一行并运行小提琴。
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.');