76

可能重复:
如何检查变量是否在 JavaScript 中定义?
是否有标准函数来检查 JavaScript 中的 null、未定义或空白变量?

我有一个分为两部分的脚本。

第一部分设置一个 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")....
4

6 回答 6

131

我怀疑SO上有很多这样的答案,但你去吧:

if ( typeof pagetype !== 'undefined' && pagetype == 'textpage' ) {
  ...
}
于 2012-12-19T01:11:40.170 回答
21

您可以使用typeof

if (typeof pagetype === 'undefined') {
    // pagetype doesn't exist
}
于 2012-12-19T01:11:47.310 回答
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 && ...) {}

但我永远不会这样写

于 2012-12-19T01:42:29.123 回答
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
于 2012-12-19T01:22:52.193 回答
3

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

var pagetype = pagetype || false;
if (pagetype === 'something') {
    //do stuff
}
于 2012-12-19T01:25:17.047 回答
3

除了使用 try..catch 如果尚未声明变量,则无法确定变量是否已声明。测试如下:

if (typeof varName == 'undefined') 

不要告诉你是否varName是范围内的变量,只有使用 typeof 的测试返回未定义。例如

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

在上面,你不能说 foo 被声明但 bar 没有。您可以使用以下方法测试全局变量in

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

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

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

  • 全局对象并不是真正的变量对象,它只是具有匹配全局变量并提供对它们的访问的属性,因此它看起来就是一个。
于 2012-12-19T01:32:00.463 回答