:今天说一下对象的扩展。
ES6中,允许在大括号里面直接写入变量和函数,作为对象的属性和方法,
可以看到这两种写法结果一样,上面呢个更为简洁;属性名就是变量名,属性值就是变量值。
除了属性简写,方法也可以简写;
下面说一下ES6中一共有五种方法可以遍历对象的属性。
1》;for...in
循环遍历对象自身和继承的可枚举属性
2》:Object.keys(obj)
返回一个数组包含对象自身的所有可枚举属性
3》:Object.getOwnPropertynames(obj)
返回一个数组,包含对象自身所有属性的键名
4》:Object.getOwnPropertySymbols(obj)
返回一个数组,包含对象自身的所有Symbol属性的键名;
5》Reflect.ownKeys(obj)
返回一个数组,包含对象自身的所有键名;
对象的扩展运算符,
昨天讲到了数组的扩展运算符,今天讲一下对象中怎么运用;
解构赋值必须是最后一个参数否则会报错;
注意一点:解构赋值的拷贝是浅拷贝。即如果一个键的值是复杂类型的值(数组,对象,函数),那么解构赋值拷贝的是这个值的引用,而不是这个值 的副本;
扩展运算符的解构赋值,不能复制继承自原型对象的属性。
o3复制了o2的属性,但是并没有复制他的原型对象o1的属性;
对象的扩展运算符(...)用于取出参数对象的所有可遍历属性,拷贝到当前对象之中;
数组是特殊的对象,对象的扩展运算符也可以用于数组
如果扩展运算符后面是一个空对象,则没有任何效果。