JQuery / Javascript:检查var是否存在

时间:2012-12-19 01:10:32

标签: javascript jquery variables

  

可能重复:
  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:

var pagetype = "textpage";

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

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

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

在没有var的页面上我自然会收到此错误:

Uncaught ReferenceError: pagetype is not defined

所以我的问题是:是否有一种方法可以使用JavaScript或JQ来检测var是否存在(不仅仅是它是否分配了数据)?

我想我会使用另一个if语句,例如:

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

6 个答案:

答案 0 :(得分:113)

我怀疑在SO上有很多这样的答案但是你去了:

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

答案 1 :(得分:19)

您可以使用typeof

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

答案 2 :(得分:9)

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

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

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

确定var是否存在的唯一100%可靠方法是捕获异常;

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

但我永远不会这样写

答案 3 :(得分:4)

为了测试存在,有两种方法。

一个。 "property" in object

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

object.hasOwnProperty( "property" )

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

var x; // variable declared in global scope and now exists

"x" in window; // true
window.hasOwnProperty( "x" ); //true

如果我们使用以下表达式进行测试,那么它将返回false

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

答案 4 :(得分:3)

在每个条件语句之前,您可以执行以下操作:

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

答案 5 :(得分:3)

除了使用try..catch导致错误(如果尚未声明)之外,无法确定是否已声明变量。测试如下:

if (typeof varName == 'undefined') 

不要告诉你varName是否是范围内的变量,只是使用typeof的测试返回undefined。 e.g。

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

在上面,你不能说foo被声明但是bar不是。您可以使用in

测试全局变量
var global = this;
...
'bar' in global;  // false

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

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

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