定义:无序的数据集合,键值对的集合

细节

键名是字符串,不是标识符,可以包含任意字符
引号可以省略,省略之后就只能写标识符
就算引号省略了,键名也还是字符串
属性名:每个key都是对象的属性名
属性值:每个value都是对象的属性值
Object.keys(obj)可以得到obj的所有key

变量做属性名

不加 [ ]的属性名会自动变成字符串
加了 [ ]则会当做变量
值如果不是字符串,则会自动变为字符串

对象的隐藏属性

JS中每个对象都有一个隐藏属性
这个隐藏属性储存着其共有属性组成的对象的地址
这个共有属性组成的对象叫做原型
也就是说,隐藏属性储存着原型的地址

增删改查

删除:delate obj.xxx 或delate obj[‘xxx’] 即可删除 obj的xxx属性
不含属性名 ‘xxx’ in obj === false
查看:查看自身所有属性Object.keys(obj)
查看自身+共有属性 console.log(obj) 或
依次用Object.keys打印出obj.proto
判断一个属性是自身的还是共有的 obj.hasOwnProperty(‘toString)
修改或增加: 直接赋值 obj.xxx = ‘yyy’ ,有则修改,无则添加
批量赋值:Object.assign(obj,{age:18,gender:’man’})

无法通过自身修改或增加共有属性
如果修改原型 不允许使用 obj.proto.toString = ‘xxx’ (不允许使用proto)
要使用 Object.prototype,toString = ‘xxx’
想要修改一个对象的原型 推荐使用 Object.create
举例: let obj = Object.create(common)
obj.name = ‘ frank ‘
让obj的原型指向common ,再添加obj的属性