三、查看属性(读属性)
1、查看自身所有属性
Object.keys(obj)
key 看所有的键 value 看所有的值 entries 看所有的键和值
查看自身属性+共有属性
console.dir(obj)
或者依次用Object.keys打印出obj.__proto__ ** //不推荐**
判断一个属性是自身的还是共有的
obj.hasOwnProperty('toString') 看是不是自己的
2、查看一个属性
两种方法查看属性
·中括号语法:obj['key']
· 点语法:obj.key
·坑新人的语法:obj[key] //此时key为一个变量 值一般不为'key'
优先使用中括号语法,点语法会误导,让你以为key不是字符串
\\\
重点重点重点:
obj.name 等价于 obj['name']
obj.name 不等价于obj[name]
这里的name是字符串,而不是变量
只有
let name = 'frank' obj[name]等价于obj['frank']
而不是objobj['name']和obj.name
\\\
四:修改或增加属性(写属性)
直接赋值
let obj = {name: 'frank'} // name 是字符串
obj.name = 'frank' // name 是字符串
obj['name'] = 'frank'
obj[name] = 'frank' // 错,因 name 值不确定
obj['na'+'me'] = 'frank'
let key = 'name'; obj[key] = 'frank'
let key = 'name'; obj.key = 'frank' // 错
因为 obj.key 等价于 obj['key']
批量赋值
Object.assgin(obj,{age:18, gender:'man}
修改或增加共有属性
无法通过自身修改或增加共有属性
let obj = {},obj2 = {} //共有属性toString
obj.toString = 'xxx' 只会改obj的自身属性
obj2.toString还是在原型上
偏要修改或增加原型上的属性
1、obj.__proto__.toString = 'xxx' //不推荐使用
2、Object.prototype.toString = 'xxx'
一般来说,不要修改原型,会引起很多问题
修改隐藏属性
不推荐使用 __proto__
let obj = {name:'frank'}
let obj2 = {name: 'jack'}
let common = {kind: 'human'}
obj.__proto__ = common
obj2.__proto__ = common
推荐使用 Object.create
let obj = Object.create(common) //以common为原创建对象
obj.name = 'frank'
let obj2 = Object.create(common)
obj2.name = 'jack'
规范大概的意思是,要改就一开始就改,别后来再改