对象
对象就是无序的数据集合,键值对的集合。写法为let obj={'name':'frank','age':18},注意键名是字符串,不是标识符,就算引号省略也是字符串。也可以用变量做属性命,例:
let p1='name'
let obj ={[p1]:'frank'}
不加[]的属性名会自动变成字符串,反之加了[]会当成变量求值。
对象的隐藏属性
每个对象都有一个隐藏属性,这个隐藏属性储存着其共有属性的地址,这个共有属性组成的对象叫做原型,即隐藏属性储存着原型的地址。对象的原型也有原型是null,使用命令Object.prototype.__proto__查看。
对象的增删改查
删除属性
用delete obj.xxx或者delete obj['xxx']删除属性,判断一个对象里面是否含有属性使用'xxx'in obj,obj.xxx====undefined不能断定'xxx'是否为obj的属性。
读属性
使用Object.keys(obj)查看对象obj的自身属性,要查看obj对象自身属性和共有属性使用命令console.dir(obj),判断一个属性是其自身的还是共有的,使用obj.hasownproperty()
查看属性
查看属性的语法有obj['key']或obj.key,注意区分obj.name等价于obj['name']并不等价于obj[name]
修改或增加属性
- 修改或增加一般属性 具体例子解释说明
let obj={'name':'xxx'}
obj.name='xxx'
obj['name']='xxx'
obj['na'+'me']='xxx'
let key='name' obj[key]='xxx'
批量修改 Object.assign(obj,{age:18,gender:'man'})
- 修改或增加共有属性
无法通过自身修改或增加共有属性。例:
let obj={} let obj2={} //共有toString
obj.toString='xxx'//只会修改`obj`自身属性
obj2.toString还是在原型上。
如果硬要修改或增加原型上的属性,也是有办法的
obj.__proto__.toString='xxx'(不推荐)
Object.prototye.toString='xxx'
- 修改隐藏属性 例:
let obj={name:'xxx'}
let obj2={name:'yyy'}
let common={kind:'human'}
obj.__proto__=common
obj2.__ptoto__=common
```这种用法不推荐
下面为推荐用法
`let obj=Object.creat(common)`至于`obj`属性后面在添加就可以了.