1. 属性简介表示法
在 ES6 中,如果对象的属性名与属性值相同,就可以简写。
1 2 3 4 5 6
| let name = 'lily' let age = 24 let obj = { name: name, age: age }
|
obj 对象可以简写成这样:
1 2 3 4
| let obj = { name, age }
|
2. 属性名表达式
我们知道,属性值是可以使用变量的。在 ES6 中,属性名也可以使用变量,只需要给变量加上[ ]。
1 2 3 4 5 6
| let n = 'name' let a = 'age' let obj = { [n]: 'lily', [a]: 24 }
|
3. 方法的简写
首先看一个普通的写法:
1 2 3 4 5 6 7
| let obj = { name: 'lily', sayHi: function () { console.log('Hi,' + this.name) } } obj.sayHi()
|
注意:对象的方法不可以使用箭头函数,因为箭头函数内的this并不会指向这个对象本身。
1 2 3 4 5 6 7 8
| let obj = { name: 'lily', sayHi: ()=>{ console.log('Hi,' + this.name) } } obj.sayHi()
|
但是对象的方法可以省略冒号和 function 关键字。
1 2 3 4 5 6 7
| let obj = { name: 'lily', sayHi() { console.log('Hi,' + this.name) } } obj.sayHi()
|
4. Object.is()
这个方法和全等(===)类似,我们先看一下它的用法:
我们看一下几个不同的点:
1 2 3 4 5
| console.log(NaN == NaN) console.log(Object.is(NaN, NaN))
console.log(+0 == -0) console.log(Object.is(+0, -0))
|
关于对象的相等判断,我们也要注意,对象是引用类型,判断的是引用地址是否相同,而不是值是否相同。
1 2 3 4 5 6 7 8 9 10
| let obj1 = { name: 'lily' } let obj2 = { name: 'lily' }
console.log(obj1 == obj2) console.log(Object.is(obj1,obj2))
let obj3 = obj1
console.log(obj1 == obj3) console.log(Object.is(obj1,obj3))
|
5. 扩展运算符 与 Object.assign()
扩展预算符 与 Object.assign() 都可以实现对象的复制。扩展预算符可以将参数对象可遍历的属性拷贝到当前对象里。
1 2 3
| let x = { a: 3, b: 4 } let y = {...x} console.log(y)
|
Object.assign() 方法用于对象合并,Object.assign() 方法的第一个参数是目标对象,后面的参数对象会被合并到目标对象里。我们看一个具体的例子:
1 2 3 4 5
| let x = { a: 3 } let y = { b: 4 } let z = { c: 5 } Object.assign(z, x, y) console.log(z)
|
如果有相同的属性,后面的对象会覆盖前面对象的属性值。
1 2 3 4 5
| let x = { a: 3 } let y = { a: 4 } let z = { a: 5 } Object.assign(z, x, y) console.log(z)
|
6. in
in 可以判断当前对象中是否包含某个属性。
1 2
| let x = { a: 5 } console.log('a' in x)
|
in 不仅可以用在对象上,也可以被用于数组。但是并不是判断某个值是否存在,而是判断某个下标的位置是否有值。
1 2
| let arr = [1, 2, 3] console.log(3 in arr)
|
7. 对象的遍历方式
1)for in
这是 ES5 中的方法。
1 2 3 4 5 6 7
| let obj = { name: 'lily', age: 24 } for(let key in obj){ console.log(key, obj[key]) }
|
我们再来看几个 ES6 中遍历对象的方法,下列演示的输出结果与上面使用for in的输出结果一致。
2)Object.keys()
1 2 3
| Object.keys(obj).forEach(key => { console.log(key, obj[key]) })
|
3)Object.getOwnPropertyNames()
1 2 3
| Object.getOwnPropertyNames(obj).forEach(key => { console.log(key, obj[key]) })
|
4)Reflect.ownKeys()
1 2 3
| Reflect.ownKeys(obj).forEach(key => { console.log(key, obj[key]) })
|