JQuery/Javascript: check if var exists
Possible Duplicate:
How can I check whether a variable is defined in JavaScript?
Is there a standard function to check for null, undefined, or blank variables in JavaScript?
我有一个分为两部分的脚本。
第一部分建立了一个VaR:
1 | var pagetype ="textpage"; |
第二部分是简单的if语句:
1 2 3 | if(pagetype =="textpage") { //do something }; |
现在第二部分,if语句,出现在我的站点的所有页面上。但是第一部分,在声明var的地方,只出现在我的一些页面上。
在没有var的页面上,我自然会得到这个错误:
1 | Uncaught ReferenceError: pagetype is not defined |
所以我的问题是:有没有一种使用JavaScript或JQ的方法来检测Var是否存在(不仅仅是它是否分配了数据)?
我在想象我会用另一个如果站,例如:
1 | if ("a var called pagetypes exists").... |
我怀疑有很多这样的答案,但是现在你开始:
1 2 3 | if ( typeof pagetype !== 'undefined' && pagetype == 'textpage' ) { ... } |
您可以使用
1 2 3 | if (typeof pagetype === 'undefined') { // pagetype doesn't exist } |
对于您的情况,99.9%的其他回答是正确的。
但由于
1 2 | var pagetype; //== undefined if (typeof pagetype === 'undefined') //true |
判断VaR是否存在的唯一100%可靠的方法是捕获异常;
1 2 3 | var exists = false; try { pagetype; exists = true;} catch(e) {} if (exists && ...) {} |
但我绝不会这样写的
为了检验是否存在,有两种方法。
A.
此方法检查原型链的属性是否存在。
b.江户十一〔二〕号
此方法不会进入原型链以检查属性的存在性,它必须存在于调用该方法的对象中。
1 2 3 4 | var x; // variable declared in global scope and now exists "x" in window; // true window.hasOwnProperty("x" ); //true |
如果我们使用以下表达式进行测试,那么它将返回false
1 | typeof x !== 'undefined'; // false |
除了使用try..catch在未声明变量的情况下导致错误之外,无法确定是否已声明该变量。类测试:
1 | if (typeof varName == 'undefined') |
不要告诉您
1 2 3 | var foo; typeof foo == 'undefined'; // true typeof bar == 'undefined'; // true |
在上述情况下,您无法判断是否声明了foo,但bar没有声明。您可以使用
1 2 3 | var global = this; ... 'bar' in global; // false |
但是全局对象是唯一可以访问的变量对象*,不能访问任何其他执行上下文的变量对象。
解决方案是始终在适当的上下文中声明变量。
- 全局对象实际上不是一个变量对象,它只是具有匹配全局变量并提供对它们的访问的属性,因此它看起来只是一个变量。
在每个条件语句之前,您可以这样做:
1 2 3 4 | var pagetype = pagetype || false; if (pagetype === 'something') { //do stuff } |