我不是在询问变量是否未定义或者是null
。我想检查变量是否存在。这可能吗?
答案 0 :(得分:19)
typeof
技术不起作用,因为它们不区分何时根本没有声明变量,何时声明变量但没有赋值,或声明并设置为等于undefined
但是如果你试图使用一个未在if条件中(或在赋值的右侧)声明的变量,则会出现错误。所以这应该有效:
var exists = true;
try {
if (someVar)
exists = true;
} catch(e) { exists = false; }
if (exists)
// do something - exists only == true if someVar has been declared somewhere.
答案 1 :(得分:1)
if ('bob' in window) console.log(bob);
请记住,即使您使用var
声明了一个变量,这意味着它也存在。
答案 2 :(得分:1)
我使用这个功能:
function exists(varname){
try {
var x = eval(varname);
return true;
} catch(e) { return false; }
}
希望这有帮助。
答案 3 :(得分:0)
当您尝试访问未在上下文中声明的变量时,您将看到错误消息显示它未定义。这是您可以执行的实际检查,以查看变量是否定义或不是空检查。
答案 4 :(得分:0)
如果您不需要在运行时知道使用JSLint。还要记住,javascript var语句被提升,所以即使var在if块中,它仍然会被定义。
老实说,我认为如果您不确定是否定义了变量,那么您做错了,应该重构您的代码。
答案 5 :(得分:0)
试试这个
var ex=false;
try {(ex=myvar)||(ex=true)}catch(e) {}
alert(ex);
如果已声明ex
,则myvar
为真。
答案 6 :(得分:0)
我认为这取决于你想对变量做什么。
比方说,你有一个JS库,如果已经定义了函数,它将调用一个函数,如果没有,那么就没有。您可能已经知道,JS中的函数是第一级对象,并且就像这样的变量。
您可能想先询问它是否存在,然后再调用它。但你也可以将尝试包装在try / catch块中调用它。
在触发事件之前和之后调用函数(如果已定义)的示例:
function fireEvent(event)
{
try
{
willFireEvent(event); // Is maybe NOT defined!
} catch(e) {}
//... perform handler lookup and event handling
try
{
hasFiredEvent(event); // Might also NOT exist!
} catch(e) {}
}
因此,不是检查变量,而是捕获错误:
var x;
try
{
x = mayBeUndefinedVar;
}
catch (e)
{
x = 0;
}
在性能等方面这是否是好事,取决于你在做什么......
答案 7 :(得分:0)
你追求的是:
window.hasOwnProperty("varname");
更安全的方法甚至可能是:
this.hasOwnProperty("varname");
取决于您的通话环境......