对象的扩展
1.属性的简洁表示法
ES6 允许直接写入变量和函数,作为对象的属性和方法。
2.属性名表达式
JavaScript语言定义对象的属性,有两种方法。
方法一是直接用标识符作为属性名,方法二是用表达式作为属性名,这时要将表达式放在方括号之内。
ES6 允许字面量定义对象时,用方法二(表达式)作为对象的属性名,即把表达式放在方括号内。
3.方法的 name 属性
函数的name属性,返回函数名。对象方法也是函数,因此也有name属性。
4.属性的可枚举性和遍历
可枚举性:
对象的每个属性都有一个描述对象(Descriptor),用来控制该属性的行为。Object.getOwnPropertyDescriptor方法可以获取该属性的描述对象。
属性的遍历:
ES6一共有5种方法可以遍历对象的属性。
for...in循环遍历对象自身的和继承的可枚举属性(不含Symbol属性)。
Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性)。
Object.getOwnPropertyNames返回一个数组,包含对象自身的所有属性(不含Symbol属性,但是包括不可枚举属性)。
Object.getOwnPropertySymbols返回一个数组,包含对象自身的所有Symbol属性。
Reflect.ownKeys返回一个数组,包含对象自身的所有属性,不管属性名是Symbol或字符串,也不管是否可枚举。
5.super 关键字
我们知道,this关键字总是指向函数所在的当前对象,ES6 又新增了另一个类似的关键字super,指向当前对象的原型对象。
6.对象的扩展运算符
《数组的扩展》一章中,已经介绍过扩展运算符(...)。
解构赋值:
对象的解构赋值用于从一个对象取值,相当于将目标对象自身的所有可遍历的(enumerable)、但尚未被读取的属性,分配到指定的对象上面。所有的键和它们的值,都会拷贝到新对象上面。
扩展运算符:
对象的扩展运算符(...)用于取出参数对象的所有可遍历属性,拷贝到当前对象之中。