《JavaScript: The Definitive Guide》【读犀牛书】- 第 6 章 对象

223 阅读2分钟

【读犀牛书】是《JavaScript: The Definitive Guide》这本书个人学习笔记的汇总,目的是夯实前端 JS 基础,欢迎讨论!

前情提要

阅读本章节你会了解到以下内容:

  1. 理解对象
  2. 创建对象的方式
  3. 对象的原型、继承
  4. 操作对象的属性,访问、删除、遍历、检测
  5. 对象的复制
  6. 对象字面量新增特性

1. 理解对象

  • 对象是无序的集合,用于存储键值对,数据结构类似散列表
  • JavaScript 对象的属性可以动态的添加或删除
  • 对象的属性有两种分类,自由属性,即直接定义在对象上的属性;继承属性,即从原型对象上继承的属性
  • 对象中不能包含同名的属性,对象的属性除了名字、值以外,还有 writable 可写、enumerable 枚举、configurable 可配置三个特性
  • 对象复制时是按引用操作的,而不是按值操作,表现在其中某个对象被修改,那指向相同引用的所有对象都会有影响

2. 创建对象的方式

(1)对象字面量

let person = {
    name: 'Phoebe'
}

(2)new 构造函数

let person = new Object()
person.name = 'Phoebe'

(3)Object.create()

4. 操作对象属性

(1)检测属性

检测对象的属性,判断自有属性可以用 hasOwnProperty() 同时还可以用它来判断是否为继承属性

// 判断自有属性
obj.hasOwnProperty('name')

// 判断继承属性
function hasPrototypeProperty(obj, name) { 
   return name in obj && obj.hasOwnProperty('name') 
}

(2)遍历属性

遍历对象的属性,可以用 for...in 或 Object.keys()

let obj = { x: 1, y: 2, z: 4 }

for(let key in obj) {
    console.log(key, obj[key])
}

const props = Object.keys(obj)    // [x, y, z]
props.forEach(key => console.log(key, obj[key]))

6. 对象字面量新增特性

(1)属性简写

let name = 'Nick', age = 27
let person = { name: 'Nick', age: 27 }

// 简写
let person = { name, age }    

function getPerson(name, age) {
    return { name: name, age: age }
}

// 简写
function getPerson(name, age) {
    return { name, age }
}    

(2)方法简写

函数作为对象的属性时,称该函数为对象的方法

let person = {
    name: 'Ross',
    getName: function() {
        return this.name
    }
}

// 简写
let person = {
    name: 'Ross',
    getName() {
        return this.name
    }
}

(3)动态添加属性

let nameAlias = 'name' 
let ageAlias = 'age' 

let person = { 
    [nameAlias]: 'Monica', 
    [ageAlias]: 27 
}