how to check if a variable exist in javascript?
我不会问变量是否未定义,或者它是否是
但是如果你试图使用一个没有在if条件中声明的变量(或者在赋值的右边),你会得到一个错误。所以这应该是有效的:
1 2 3 4 5 6 7 | 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 2 3 4 5 6 | function exists(varname){ try { var x = eval(varname); return true; } catch(e) { return false; } } |
希望这有帮助。
1 | if ('bob' in window) console.log(bob); |
请记住,即使您用
你想要的是:
1 | window.hasOwnProperty("varname"); |
更安全的方法可能是:
1 | this.hasOwnProperty("varname"); |
不过,这取决于你的通话环境…
我认为这取决于你想对变量做什么。
例如,假设您有一个JS库,如果定义了一个函数,那么它将调用该函数;如果没有,那么就不调用它。您可能已经知道函数是JS中的第一级对象,并且是这样的变量。
你可能会先问它是否存在,然后再打电话给它。但您也可以将调用它的尝试包装在一个try/catch块中。
在触发事件之前和之后调用函数(如果已定义)的代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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) {} } |
因此,不检查变量,而是捕获错误:
1 2 3 4 5 6 7 8 9 10 | var x; try { x = mayBeUndefinedVar; } catch (e) { x = 0; } |
在性能等方面,这是否是一件好事,取决于你在做什么……
试试这个
1 2 3 | var ex=false; try {(ex=myvar)||(ex=true)}catch(e) {} alert(ex); |
如果声明了
工作示例:http://jsfiddle.net/wcqlz/
如果您在运行时不需要知道,请使用jslint。还请记住,javascript var语句被挂起,因此即使var在if块中,它仍将被定义。
老实说,我认为如果您不确定是否定义了一个变量,那么您就做了一些错误的事情,应该重构代码。
当您试图访问上下文中没有声明的变量时,您将看到错误消息说它是未定义的。这是您可以执行的实际检查,以查看变量是否已定义或不为空。