如何检查是否实际声明了JavaScript变量?
此解决方案在我的情况下不起作用:
JavaScript check if variable exists (is defined/initialized)
示例:
(function(){
var abc;
alert(typeof abc === 'undefined') // true
})();
同样:
(function(){
alert(typeof abc === 'undefined') // true
})();
在这两种情况下都会产生true
。我能做到这一点:
(function(){
var abc;
var isDefined = false;
try { isDefined = abc || !abc; }
catch(e) {}
alert(isDefined); // true
})();
它有效,但我正在寻找更好的x浏览器。
编辑:我想在一段通过eval
运行的动态代码中使用它,并检查某个变量是否存在于本地或全局范围内。
答案 0 :(得分:1)
这个问题已被多次询问,答案是"你不能"#34; (除了在OP中使用try..catch)。
您可以使用或 hasOwnProperty 中的检查对象的属性,但这两者都要求您可以访问要测试的对象。变量属于执行上下文的变量对象(ES 3)或environment record(ES 5),并且它们不可访问,因此您无法检查其属性。
特殊情况是全局对象,因为全局变量(即全局环境记录的属性)是全局对象的属性,因此您可以这样做:
var global = this;
var foo;
// Declared but not initialised
foo in global // true
global.hasOwnProperty('foo'); // true
// Not declared or initialised
bar in global // error
global.hasOwnProperty('bar'); // true
但是,IE<版本的全局对象不支持 hasOwnProperty 方法。 9.
答案 1 :(得分:1)
您可以使用"use strict"
这样检测到这一点:
"use strict";
try {
myVar = 7;
console.log("myVar is "+myVar);
} catch(e) {
console.log("error");
}
运行脚本,它将打印“错误”。然后注释掉“use strict”并再次运行它;它将打印“myVar is 7”。