Skip to content

一、认识对象

1. 对象

  • 对象(object)是键值对的集合,表示属性和值的映射关系

  • 对象的语法

    • k和v之间用冒号分割,每组k:v之间用逗号分割,最后一个k:v对后可以不书写逗号。
  • 属性是否加引号

    • 如果对象的属性键名不符合命名规范,则这个键名必须用引号包裹。
      js
         var xiaoming = {
            name: '小明',
            age: 12,
            'favorite-book': '三毛流浪记'
        }
  • 属性的访问

    • 可以用点语法访问对象中指定键的值。
    • 如果属性名不符合JS标识符命名规范,则必须用方括号的写法来访问。
    • 如果属性名以变量形式存储,则必须使用方括号形式。
  • 属性的更改

    • 直接使用赋值运算符重新对某属性赋值即可更改属性
  • 属性的创建

    • 如果对象本身没有某个属性值,则用点语法赋值时,这个属性会被创建出来
  • 属性的删除

    • 如果要删除某个对象的属性,需要使用delete操作符
      js
         var obj = { a: 1, b: 2 }; 
         delete obj.a;

2. 对象方法

  • 如果某个属性值是函数,则它也被称为对象的"方法"

    js
       var xiaoming = {
          name: '小明', 
          age: 12, 
          sex: '男', 
          hobbys: ['足球', '游泳', '编程'], 
          'favorite-book': '舒克和贝塔', 
          sayHello: function () {   // sayHello方法
              console.log('你好,我是小明,今年12岁,我是个男生');
           }
      };
  • 使用"点语法"可以调用对象的方法

  • 方法和函数

    • 方法也是函数,只不过方法是对象的"函数属性",它需要用对象打点调用。

3. 对象的遍历

  • 和遍历数组类似,对象也可以被遍历,遍历对象需要使用for...in...循环
  • 使用for...in...循环可以遍历对象的每个
    js
      for (var k in obj) { 
        console.log('属性' + k + '的值是' + obj[k]); 
      }
    • 循环变量k,它会依次成为对象的每一个键。
    • obj要遍历的对象。
    • obj[k]要遍历的对象。

4. 对象的深浅克隆

  • 对象是引用类型值
    • 对象是引用类型值,这意味着:
      • 不能用var obj2 = obj1这样的语法克隆一个对象。
      • 使用==或者===进行对象的比较时,比较的是它们是否为内存中的同一个对象,而不是比较值是否相同。
  • 对象的浅克隆
    • 浅克隆:只克隆对象的"表层",如果对象的某 些属性值又是引用类型值,则不进一步克隆它们,只是传递 它们的引用
    • 使用for...in...循环即可实现对象的浅克隆
  • 对象的深克隆
    • 深克隆:克隆对象的全貌,不论对象的属性值是 否又是引用类型值,都能将它们实现克隆。
    • 和数组的深克隆类似,对象的深克隆需要使用递归。

Released under the MIT License.