对象定义
- 无序的数据集合(可以打乱顺序)
- 键值对集合{'name'(属性名)和'william'(属性值)是一对,'age'(属性名)和'18'(属性值)是一对}
写法
let obj = {'name': 'william', 'age': 18} // 简单写法
let obj = new Object({'name': william}) // 正规写法
console.log({'name': william', 'age': 18})
细节
- 键名(key)是字符串,不是标识符,可以包含任意字符
- 引号可省略
- 就算引号省略了,键名也还是字符串(重要)
- Object.keys(obj)可以得到obj的所有key,所有属性名会自动变成字符串
let obj = {
1: "a",
3.2: "b",
1e2: true,
1e-2: true,
0.234: true,
0xff: true,
};
Object.keys(obj); => ["1","100","255","3.2","0.01","0.234"]
变量作属性名
let p1 = "name";
let obj = {p1 : 'william'} 这样写,属性名为'p1'
let obj = {[p1] : 'william'} 这样写,属性名为'name'
1.不加[]的属性名会自动变成字符串
2.加了[]则会当做变量求值
3.值如果不是字符串,则会自动变成字符串
对象的增删改查
删
删除obj的xxx属性
let obj = {'name': 'william', 'age': 18}
delete obj.name // 删除obj的name属性
obj
{age: 18} // name的槽也删了
// 或者,下面这种,两种一样的效果
let obj = {'name': 'william', 'age': 18}
delete obj['name'] // 删除obj的name属性
{age: 18} // name的槽也删了
(删除obj的xxx属性)obj.name = undefined
let obj = {'name': 'william', 'age': 18}
obj.name = undefined // 删除obj的name属性
obj
{name: undefined, age: 18} // name 的槽还在
检验对象不含属性名
'xxx' in obj === false
含有属性名,但是值为undefined
'xxx' in obj && obj.xxx === undefined
注意obj.xxx === undefined不能断定'xxx'是否为obj的属性
查
1.查看自身所有属性
Object.keys(obj)
2.查看自身所有值
Object.values(obj)
3.查看自身属性和值
obj或者Object.entries(obj)
4.查看自身+共有属性
console.dir(obj)
5.判断一个属性是否是自身属性还是共有属性
let obj = {
'name' : 'william',
'age' : 18
}
obj.hasOwnProperty('name') // ''里的为属性,true为自身属性,false为共有属性
4.instanceof 判断一个实例是否属于某种类型
let obj = {};
obj instanceof Object; // 判断obj是否属于对象
修改或增加属性(写属性)
直接赋值
let obj = {name: 'william'} // name 是字符串
obj.name = 'william' // name 是字符串
obj['name'] = 'william'
注意:obj[name] = 'william' // 错误,因为name是变量,不确定
obj['na'+'me'] = 'william'
let key = 'name'; obj [key] = 'william'
注意:let key = 'name'; obj.key = 'william' // 错误,obj.key等价于obj['key']
批量赋值
Object.assign(赋值的对象,赋值内容[对象形式写出])
let obj = {}
Object.assign(obj,{p1:1,p2:2,p3:3}) // 注意obj后面的逗号
修改隐藏属性
不推荐使用__proto__
let obj = {name: 'william}
let obj2 = {name: 'jack'}
let common = {kind: 'human'}
obj.__proto__ = common
obj2.__proto__= common
推荐使用Object.create
let obj = Object.create(common)
obj.name = 'william'
let obj2 = Object.create(common)
obj2.name = 'jack'