【读犀牛书】是《JavaScript: The Definitive Guide》这本书个人学习笔记的汇总,目的是夯实前端 JS 基础,欢迎讨论!
前情提要
阅读本章节你会了解到以下内容:
- 理解对象
- 创建对象的方式
- 对象的原型、继承
- 操作对象的属性,访问、删除、遍历、检测
- 对象的复制
- 对象字面量新增特性
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
}