对象的原型:
声明对象的两种语法:
let obj = {"name":"jack"}//语法糖let obj = new Object({'name': 'jack'})console.log({ 'name': 'jack, 'age': 18 })-
如何删除对象的属性:
delete obj.xxx 或delete obj['xxx']- 不含属性名
'xxx' in obj === false 含有属性名,但是值为
undefined'xxx' in obj && obj.xxx === undefined注意
obj.xxx === undefined不能断定'xxx'是否为obj的属性如何查看对象的属性:
查看自身所有属性
Object.keys(obj)- 查看自身+共有属性
console.dir(obj) 判断一个属性是自身的还是共有的
obj.hasOwnProperty('toString')如何修改或增加对象的属性:
批量赋值
Object.assign(obj, {age: 18, gender: 'man'})- 无法通过自身修改或增加共有属性
let obj = {}, obj2 = {} // 共有 toString obj.toString = 'xxx'只会在改 obj 自身属性 obj2.toString 还是在原型上
- 我偏要修改或增加原型上的属性
Object.prototype.toString = 'xxx'
(一般来说,不要修改原型,会引起很多问题)
‘name’ in obj和obj.hasOwnProperty(‘name’) 的区别:
'name' in obj是用来判断obj中是否有name属性,只要有,不管是否在原型中都会返回true,hasOwnProperty,只能用来查看obj的私有属性中是否有name属性,如果name在其原型中则返回false。

