Javascript检查变量是否已声明但未赋值

时间:2015-11-11 14:47:45

标签: javascript variables initialization undefined declare

我希望能够检查是否已声明变量,但尚未分配值。我搜索过类似的问题,似乎都建议使用

typeof myVar !== 'undefined'

但总是返回false,因为即使声明它仍未定义。这些是我想要得到的结果:

var myVar;    // Variable is  declared.  Test should return TRUE
//var myVar;  // Variable not declared.  Test should return FALSE 

3 个答案:

答案 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;
&#13;
&#13;

答案 2 :(得分:0)

如果您有全局变量或某些属性,则可以使用hasOwnProperty方法。例如window.hasOwnProperty('myVar')object.hasOwnProperty('myVar')如果已定义变量/属性,则为真。

typeof运算符不会为您提供此类信息,因为它将为未完全定义的变量返回“undefined”,但您可以将其与先前的技术结合使用以检查变量是否已定义但尚未赋值。但是,如果首先为变量分配了一个值并且分配了未定义的值,那么这仍然会给你误报。

对于局部变量(非全局变量),尽管它们是属性,但您不能引用“它们的”对象。但是对未定义变量的调用应该导致异常。所以你可以尝试这个片段:

function isDefined(variableName) {
    try {
        eval(variableName);
    } catch (ex) {
        return false;
    }
    return true;
}
这里使用了 eval,因此异常会在try catch中发生 - 而不是在调用isDefined时。 我真的建议不要在生产附近使用它

所有说出你想要的东西有点奇怪 - 你真的需要检查一个变量是否被定义了?