判断对象是否存在,java判断对象是否存在

  判断对象是否存在,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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: