JQuery / Javascript:检查是否存在var

可能重复:
我怎样才能检查一个variables是否在JavaScript中定义?
有没有一个标准的函数来检查JavaScript中的空,未定义或空白variables?

我有一个脚本发生在两个部分。

第一部分设置了一个var:

var pagetype = "textpage"; 

第二部分是一个简单的if语句:

 if(pagetype == "textpage") { //do something }; 

现在第二部分if语句出现在我网站的所有页面上。 但是,声明var的第一部分只出现在我的一些页面上。

在没有var的页面上,我自然会得到这个错误:

 Uncaught ReferenceError: pagetype is not defined 

所以我的问题是:是否有一种方法与JavaScript或JQ来检测是否存在一个变种(不只是如果它有数据分配给它)?

我在想像我会用另一个如果陈述,例如:

 if ("a var called pagetypes exists").... 

我怀疑有这样的答案,所以在这里你去:

 if ( typeof pagetype !== 'undefined' && pagetype == 'textpage' ) { ... } 

你可以使用typeof

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

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

但是因为undefined是一个有效的值,如果有人要testing一个未初始化的variables

 var pagetype; //== undefined if (typeof pagetype === 'undefined') //true 

确定variables是否存在的唯一可靠的方法是捕捉exception;

 var exists = false; try { pagetype; exists = true;} catch(e) {} if (exists && ...) {} 

但我绝不会这样写

为了testing存在,有两种方法。

一个。 "property" in object

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

object.hasOwnProperty( "property" )

这个方法没有上传原型链来检查属性的存在,它必须存在于你调用方法的对象中。

 var x; // variable declared in global scope and now exists "x" in window; // true window.hasOwnProperty( "x" ); //true 

如果我们使用下面的expression式进行testing,那么它将返回false

 typeof x !== 'undefined'; // false 

在每个条件语句之前,你可以做这样的事情:

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

如果没有声明一个variables,就不可能确定一个variables是否已被声明,除非使用try..catch导致一个错误。 testing像:

 if (typeof varName == 'undefined') 

不要告诉你, varName是否是范围内的一个variables,只有用typeof进行的testing返回undefined。 例如

 var foo; typeof foo == 'undefined'; // true typeof bar == 'undefined'; // true 

在上面,你不能说foo被宣布,但bar不是。 你可以用下面的方法testing全局variables:

 var global = this; ... 'bar' in global; // false 

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

解决scheme是始终在合适的上下文中声明variables。

  • 全局对象并不是一个真正的variables对象,它只是具有匹配全局variables的属性,并提供对它们的访问,所以它看起来只是一个。