JavaScript的对象深入学习

JavaScript的对象是一种无序的集合数据类型,它由若干键值对组成。

  JavaScript用一个{...}表示一个对象,键值对以xxx: xxx形式申明,用,隔开。注意,最后一个键值对不需要在末尾加,,

  键值对即属性和值,访问属性是通过.操作符完成的,但这要求属性名必须是一个有效的变量名。如果属性名包含特殊字符,

  就必须用''括起来,访问这个属性也无法使用.操作符,必须用['xxx']来访问:

  var xiaohong = {
        name: '小红',
        'middle-school': 'No.1 Middle School'
  };
   
  xiaohong['middle-school']; // 'No.1 Middle School'
  xiaohong['name']; // '小红'
  xiaohong.name; // '小红'
  
  也可以用xiaohong['name']来访问xiaohong的name属性,不过xiaohong.name的写法更简洁。我们在编写JavaScript代码的时候,

  属性名尽量使用标准的变量名,这样就可以直接通过object.prop的形式访问一个属性了。

  实际上JavaScript对象的所有属性都是字符串,不过属性对应的值可以是任意数据类型。

  如果访问一个不存在的属性会返回什么呢?JavaScript规定,访问不存在的属性不报错,而是返回undefined

  var xiaoming = {
        name: '小明'
  };
  xiaoming.age; // undefined

  如果我们要检测xiaoming是否拥有某一属性,可以用in操作符

  var xiaoming = {
        name: '小明',
        birth: 1990,
        school: 'No.1 Middle School',
        height: 1.70,
        weight: 65,
        score: null
  };
  'name' in xiaoming; // true
  'grade' in xiaoming; // false

  不过要小心,如果in判断一个属性存在,这个属性不一定是xiaoming的,它可能是xiaoming继承得到的

   'toString' in xiaoming; // true

   因为toString定义在object对象中,而所有对象最终都会在原型链上指向object,所以xiaoming也拥有toString属性。

   要判断一个属性是否是xiaoming自身拥有的,而不是继承得到的,可以用hasOwnProperty()方法:

   var xiaoming = {
         name: '小明'
   };
   xiaoming.hasOwnProperty('name'); // true
   xiaoming.hasOwnProperty('toString'); // false
posted @ 2017-06-28 18:57  心有猛虎_细嗅蔷薇  阅读(115)  评论(0)    收藏  举报