一、声明对象的两种语法
let obj = new Object({'name': 'frank'})
console.log({ 'name': 'frank, 'age': 18 })
注意:
- 键名是字符串,不是标识符,可以包含任意字符
- 引号可以省略,省略后只能写标识符
- 就算引号省略了,键名也还是字符串
属性名:
- 每个key都是对象的属性名(property
- 所有属性名会自动变成字符串
- Object.keys(obj)可以获得obj的所有key
用变量做属性名:
let obj = { p1 : 'frank' } //这样写,属性名为'p1'
let obj = { [p1] : 'frank' } //这样写,属性名为'name'
不加[]的属性名会自动变成字符串,加了则会当作变量求值,值如果不是字符串会变成字符串
属性值:每个value都是对象的属性值
二、如何删除对象的属性
delete obj.xxx
delete obj ['xxx']
'name' in obj ===false 则说明 obj 对象中没有属性名 'name';
'name' in obj && obj.name===undefined 则说明 obj 对象中有属性名 'name',但属性值为 undefined。
三、如何查看对象的属性
Object.keys(obj) //查看自身所有属性
console.dir(obj) //查看自身+共有属性
obj.hasOwnProperty('toString') //判断一个属性是自身的还是共有的
'toSrting' in obj //用来看是否存在该属性,但是不知道是谁的
四、如何修改或增加对象的属性
obj['name'] = 'jack' //直接赋值,改自身
Object.assign(obj, {age:18, ...}) //批量赋值,改自身
obj.__proto__['toString'] = 'xxx' //改共有属性,不推荐
Object.prototype['toString'] = 'xxx'//改共有属性
obj.__proto__ = common//改原型,不推荐
let obj = Object.create(common) //改原型
五、'name' in obj和obj.hasOwnProperty('name') 的区别
- 查看属性名name是否存在:'name' in obj 控制台的输出为false或true;
- 判断属性name是自身的还是共有的:obj.hasOwnProperty('name'),输出为false或true。
- 'name' in obj不能判断是否是自身属性,obj.hasOwnProperty('name')可以判断。