一、基本概念
1.1 对象的构成
对象(object)是 JavaScript 语言最重要的数据类型。简单说,对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据的集合。声明一个对象的方法为:
let obj = {
'foo': 'Hello',
'bar': 'World'
}
或者
let obj = new Object({'foo': 'Hello', 'bar': 'World'})
对象中包括键名(属性名)和键值(属性值)两种基本单元。
键值非常简单,它可以是任意一种数据类型,没有特殊要求。
而键名都是字符串,并且可以是任意的字符串。它的引号可以省略,但即便是省略了引号,它仍然会自动转为字符串。只不过在省略引号时,键名就必须要符合标识符的规则了。
变量也可以作为键名,但是要加上[]:
let a = 'xxx'
let obj = {[a]: 'yyy'}
如果变量的值不是字符串,则会自动转为字符串。
1.2 隐藏属性
每个对象都有隐藏属性,这些隐藏属性通常是对象的共有属性,因此隐藏属性指向共有属性所组成的对象,这个对象称之为原型。例如:
let obj = {}
obj.toString()
obj 本身没有属性 toString,但是它的原型中存在 toString 属性,因此不会报错。
二、对象的操作
2.1 删除对象的属性
用delete obj.xxx即可 obj 的 xxx属性。
'xxx' in obj可以判断 obj 中是否有 xxx 属性,无此属性会返回 false。然而这样并不能判断 xxx 是否是其本身的属性,用obj.hasOwnProperty('xxx') 可以判别 obj 本身有无 xxx 属性。
obj.xxx === undefined并不能判断 obj 中是否有 xxx。
2.2 属性的查看
Object.keys(obj) //查看所有属性名,不包括隐藏属性
Object.values(obj) //查看所有属性值,不包括隐藏属性
Object.entries(obj) //查看所有属性名和属性值,不包括隐藏属性
console.dir(dir) //以目录形式查看对象的所有属性,包括隐藏属性
2.3 属性的读取
- 中括号语法:
obj['xxx'] - 点语法:
obj.xxx
注意,obj[xxx],并非是读取 'xxx' 属性,这里的 xxx 会被视为变量。
2.4 属性的增改
- 直接赋值
let obj = {name: 'xxx'}
obj.age = 18
obj['name'] = 'yyy'
obj['na' + 'me'] = 'zzz'
- 批量赋值
Object.assign(obj, {name: 'xxx', age: 18})
- 修改隐藏属性
let common = {kind: 'human'}
let obj = Object.create(common) //common 作为 obj 的隐藏属性