判断对象是否存在,java判断对象是否存在
本教程运行环境:windows7系统,javascript1.8.5版本1.8.5,戴尔G3电脑。
javascript判断对象是否存在的方法
现在,我们要判断一个全局对象myObj是否存在,如果不存在,就声明它。用自然语言描述的算法如下:
如果(myObj不存在){
声明myObj
}以下是10种实现方式:
方法1:
如果(!myObj) {
var myObj={ };
}方法2:
除了var命令之外,还可以进行另一次重写,也可以获得正确的结果:
如果(!window.myObj) {
myObj={ };
}window是javascript的顶层对象,所有全局变量都是它的属性。因此,判断myobj是否为空相当于判断窗口对象是否具有myobj的属性,这样就可以避免因为没有定义myObj而导致ReferenceError错误。但是,从代码的规范性角度来看,最好在第二行添加var:
如果(!window.myObj) {
var myObj={ };
}或者这样写:
如果(!window.myObj) {
window . myobj={ };
}方法3:
以上写法的缺点是,在某些运行环境下(如V8、Rhino),window不一定是顶层对象。所以,考虑把它重写为:
如果(!this.myObj) {
this . myobj={ };
}在全局变量级别,这个关键字总是指向顶层变量,所以可以独立于不同的运行环境。
方法4:
但是,上面的文字可读性很差,而且它的指向是可变的,容易出错,所以进一步重写:
var global=this
如果(!global.myObj) {
global . myobj={ };
}用自定义变量global来表示顶层对象就清楚多了。
方法5:
还可以使用typeof运算符来确定是否定义了myObj。
if (typeof myObj==undefined) {
var myObj={ };
}这是目前应用最广泛的判断javascript对象是否存在的方法。
方法6:
由于myObj的值在定义但未赋值时直接等于undefined,所以上面的写法可以简化为:
if (myObj==undefined) {
var myObj={ };
}这里有两点需要注意。第一,第二行的var关键字不能少,否则会出现ReferenceError。其次,undefined不能加单引号或双引号,因为这里比较的是undefined的数据类型,而不是 undefined 的字符串。
方法7:
上面的写法在‘精确比较’的情况下依然成立(===):
if (myObj===undefined) {
var myObj={ };
}方法8:
根据javascript的语言设计,undefined==null,所以比较myObj是否等于null也能得到正确的结果:
if (myObj==null) {
var myObj={ };
}但是,虽然运行结果是正确的,但是语义上,这种判断方法是错误的,应该避免。因为null指的是已经赋值为null的空对象,也就是这个对象实际上是有值的,而undefined指的是不存在或者没有赋值的对象。因此,这里只能使用“比较运算符”(==)。如果此处使用了“精确比较运算符”(===),将会出现错误。
方法9:
还可以使用in运算符来确定myObj是否是顶级对象的属性:
如果(!(“myObj”在窗口中)){
window . myobj={ };
}方法10:
最后,使用hasOwnProperty方法,确定myObj是否是顶级对象的属性:
如果(!this . hasownproperty( myObj ){
this . myobj={ };
}总结
1.如果只是判断对象是否存在,建议使用第五种写法。
2.如果需要判断一个对象除了存在之外是否还有空值,建议使用第一种写法。
3.除非在特殊情况下,所有变量都应该用var命令声明。
4.对于跨平台,建议避免使用window来表示顶层对象。
5.在Javascript语言中,null和undefined很容易混淆。当两者都可能涉及时,建议使用“精确比较”运算符(===)。
【推荐学习:javascript高级教程】以上是javascript如何判断一个对象是否存在的详细内容。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。