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的属性,并提供对它们的访问,所以它看起来只是一个。