JQuery/Javascript:检查变量是否存在

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' ) {
  ...
}


您可以使用typeof

1
2
3
if (typeof pagetype === 'undefined') {
    // pagetype doesn't exist
}


对于您的情况,99.9%的其他回答是正确的。

但由于undefined是一个有效值,如果有人要测试一个未初始化的变量

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."property" in object

此方法检查原型链的属性是否存在。

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')

不要告诉您varName是否是作用域中的变量,只有typeof返回的测试未定义。例如

1
2
3
var foo;
typeof foo == 'undefined'; // true
typeof bar == 'undefined'; // true

在上述情况下,您无法判断是否声明了foo,但bar没有声明。您可以使用in测试全局变量:

1
2
3
var global = this;
...
'bar' in global;  // false

但是全局对象是唯一可以访问的变量对象*,不能访问任何其他执行上下文的变量对象。

解决方案是始终在适当的上下文中声明变量。

  • 全局对象实际上不是一个变量对象,它只是具有匹配全局变量并提供对它们的访问的属性,因此它看起来只是一个变量。


在每个条件语句之前,您可以这样做:

1
2
3
4
var pagetype = pagetype || false;
if (pagetype === 'something') {
    //do stuff
}