对象的语法
写法
let obj = { 'name': 'frank', 'age': 18 }
let obj = new Object({'name': 'frank'})
console.log({ 'name': 'frank, 'age': 18 })
- 就算引号省略了,键名也还是字符串
- 每个 key 都是对象的属性名
- 每个 value 都是对象的属性值
- Object.keys(obj) 可以得到 obj 的所有 key
如何用变量做属性名
let p1 = 'name'
let obj = { p1 : 'frank'} //这样写,属性名为 'p1'
let obj = { [p1] : 'frank' } //这样写,属性名为 'name'
对比
- 不加 [ ] 的属性名会自动变成字符串
- 加了 [ ] 则会当做变量求值
- 值如果不是字符串,则会自动变成字符串
对象的隐藏属性
- JS 中每一个对象都有一个隐藏属性
- 这个隐藏属性储存着其共有属性组成的对象的地址
- 这个共有属性组成的对象叫做原型
- 也就是说,隐藏属性储存着原型的地址
删除属性
写法:
delete obj.xxx 或 delete obj['xxx']
查看属性是否存在
'xxx' in obj
true 在;false:不在
含有属性名,但是值为 undefined
'xxx' in obj && obj.xxx === undefined
- 注意:
obj.xxx === undefined不能断定 'xxx' 是否为 obj 的属性
查看属性
两种方法查看属性
中括号语法:obj['key'] (优先使用该语法)
点语法:obj.key
查看自身所有属性
Object.keys(obj)
Object.value(obj) 查值
Object.entries(obj)键、值都查
查自身+共有属性
console.dir(obj2)
obj2.__proto__ //不推荐
判断一个属性是自身的还是共有的
obj.hasOwnProperty('toString')
true:自身的 ,false:共有的
原型
- 每个对象都有原型
- 对象的原型也是对象
如何修改或增加对象的属性
直接赋值
let obj = {name: 'frank'} // name 是字符串
obj.name = 'frank' // name 是字符串
批量赋值
Object.assign(obj, {age: 18, gender: 'man'})
修改隐藏属性
let obj = Object.create(common)
obj.name = 'frank'
- 要改就一开始就改,别后来再改
另外也可使用
__proto__但不推荐使用
'name' in obj和obj.hasOwnProperty('name') 的区别
-
'name' in obj查看属性name是否在obj里,但是它无法区分这个属性是自身特有的还是共有的。 -
obj.hasOwnProperty('name')用来检测name是否为obj特有的属性还是共有的属性,如果是特有的返回true,如果是共有的则返回false
资料参考:饥人谷