1 声明对象的两种语法
1.1 语法
第一种;
let obj = { name: "frank", age: 18 };
第二种;
let obj = new Object({ name: "frank" });
匿名对象:
console.log({'name':"frank",age:18})
注意:
{foo : 'a'}
不是对象
1.2 属性名的写法
- 键名(属性名)永远是字符串,不是标识符,可以包含任意字符
- 引号可以省略,省略之后只能用标识符的写法(全数字除外)
- 就算引号省略了,键名也是字符串。
- 当有空格和特殊字符时必须加引号。
- 没有数字键名和数字下标,因为浏览器会自动将数字转换为字符串。
1.3 变量作为属性名
如果想用变量的值做属性名,要用[]将属性名括起来
let a = 'xxx'
let obj = {[a] : 111}
对比
- 不加[]的属性名会自动变成字符串
- 加了[]则会当做变量求值
- 如果值不是字符串,则会尝试变为字符串
2 如何删除对象的属性
2.1 语法
delete obj.xxx 或
delete obj['xxx']
2.2 查看某个属性是否为该对象的属性
方法一
'name' in obj // false 无法区分该属性是自己的还是原型上共有的
方法二
obj.hasOwnProperty('name') // false
2.3 注意
obj.xxx === undefined 不能判断'xxx'是否为obj的属性,如果要判断:'xxx' in obj && obj.xxx === undefined
反例:
var obj = {}
var obj2 = {x: undefined}
obj.x === undefined // true
obj2.x === undefined // true
3. 如何查看对象的属性
3.1 查看对象自身所有属性
Object.keys(obj) // 查看keys
Object.values(obj) // 查看values
Object.entries(obj) // 查看keys和values
3.2 查看对象自身+共有属性
console.dir(obj) // 通过目录的形式查看自身的属性
3.3 判断一个属性是自身的还是共有的
'name' in obj // 不能判断出这个属性是自身属性还是共有属性
obj,hasOwnProperty('name') // true 代表是自身属性
3.4 两种方法查看属性值
中括号语法:obj['key']
点语法:obj.key
注意
obj[key] // 不加''就是变量,变量key的值不确定
obj[console.log('name')] // undefined 因为.log返回undefined
4 如何修改或增加对象的属性
4.1 直接赋值
let obj = {name: 'frank'}
改:
obj.name = 'an'
obj['name'] = 'an'
obj['na' + 'me'] = 'an'
或者:
let key = 'name'
obj[key] = 'an'
4.2 批量赋值
Object.assign(obj,{age: 18, gender: 'man'})
4.3 修改共有属性
- 无法通过自身修改或增加共有属性
- 若要修改或增加原型上的属性
obj.__proto__.toString = 'xxx' // 不推荐
Object.prototype.toString = 'xxx'
obj.__proto__ === window.Object.prototype
4.4 修改原型
obj.__proto__ = null // 不推荐
let obj = Object.create(common) // 属性在原型上