我希望能够检查是否已声明变量,但尚未分配值。我搜索过类似的问题,似乎都建议使用
typeof myVar !== 'undefined'
但总是返回false,因为即使声明它仍未定义。这些是我想要得到的结果:
var myVar; // Variable is declared. Test should return TRUE
//var myVar; // Variable not declared. Test should return FALSE
答案 0 :(得分:1)
不幸的是typeof
会在两种情况下都返回未定义的内容。我知道找出变量是否实际定义的唯一方法是使用try-catch。试试这个:
var a;
var aExists=true;
var bExists=true;
try{a}catch(e){aExists=false}
try{b}catch(e){bExists=false}
console.log(aExists, bExists);
答案 1 :(得分:0)
您可以使用in运算符并检查当前上下文中是否存在变量来执行此操作:
var myVarDeclared;
var myVarDefined = '';
var myVarDeclaredTest = 'myVarDeclared' in this;
var myVarDefinedTest = 'myVarDefined' in this;
var notDeclaredTest = 'notDeclared' in this;
document.write('myVarDeclared test: ' + myVarDeclaredTest + '<br>'); //true
document.write('myVarDefined test: ' + myVarDefinedTest + '<br>'); //true
document.write('notDeclared test: ' + notDeclaredTest + '<br>'); //false
&#13;
答案 2 :(得分:0)
如果您有全局变量或某些属性,则可以使用hasOwnProperty方法。例如window.hasOwnProperty('myVar')
或object.hasOwnProperty('myVar')
如果已定义变量/属性,则为真。
typeof运算符不会为您提供此类信息,因为它将为未完全定义的变量返回“undefined”,但您可以将其与先前的技术结合使用以检查变量是否已定义但尚未赋值。但是,如果首先为变量分配了一个值并且分配了未定义的值,那么这仍然会给你误报。
对于局部变量(非全局变量),尽管它们是属性,但您不能引用“它们的”对象。但是对未定义变量的调用应该导致异常。所以你可以尝试这个片段:
function isDefined(variableName) {
try {
eval(variableName);
} catch (ex) {
return false;
}
return true;
}
这里使用了所有说出你想要的东西有点奇怪 - 你真的需要检查一个变量是否被定义了?