一、声明对象的两种语法
let obj = { 'name' : 'frank' , 'age' : 18}
-
let obj = new Object ({ 'name' : 'frank'})
两种写法都可以,只是第二种更规范 - 细节
键名是字符串,不是标识符,可以包含任意字符
引号可以省略,但键名还是字符串,省略之后就只能写标识符
二、如何删除对象的属性
- delete obj .xxx或delete obj ['xxx']
如使用undefined,属性名还在,只是属性值为undefined
而使用delete obj.name,name及其属性值都没了
- 'xxx' in obj 可查看xxx是不是obj的属性名
- xxx' in obj && obj.xxx可查看属性值
三、如何查看对象的属性
- 查看自身所有属性
Object.keys(obj) 查看属性名
Object.values(obj)查看属性值
Object.entries(obj)查看属性名和属性值
- 查看自身及共有属性
console.dir(obj)
或者自己依次用Object.keys打印出obj.__ proto__
- 判断一个属性是自身的还是共有的
obj.hasOwnProoerty('name')
如是自身的则返回true,如为共有则返回false
四、如何修改或增加对象的属性
修改或增加属性
- 直接赋值
let obj ={name:'frank'}
obj.name='frank'
obj['name']='frank'
obj['na'+'me']='frank'
let key= 'name'; obj[key] ='frank'
- 批量赋值
Object.assign(obj,{age:18,gender:'male'})
修改或增加共有属性
obj.__proto__.toString='xxx'
不推荐此方法
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)
obj.name ='frank'
let obj2 =Object.create(common)
obj2.name ='jack'
五、'name' in obj和obj.hasOwnProperty('name') 的区别
'name' in obj 是查看name是否为obj的属性,但当使用'toString in obj' 时也返回true,所以隐藏属性无法使用此写法。
应该使用obj.hasOwnProperty('toString')查看