第9章 对象的扩展
1. 属性的简洁表示法
ES6允许直接写入变量和函数做为对象的属性和方法。这样书写更加简洁。
var foo='bar';
var baz={foo};
//等同于
var baz={foo:'bar'};
以上表示,ES6允许在对象中只写属性名,不写属性值。这里,属性值 等于 属性名所代表的变量。
除了属性可以简写,方法也可以简写。
var o = {
method() {
return "hello";
}
}
//等同于
var o = {
method:function() {
return "hello";
}
}
如果某个方法的值是一个Generator函数,则其前面需要加上星号。
4. Object.is()
Object.is用来比较两个值是否严格相等。它与(===)的行为基本一致。
不同之处:
+0 === -0; //true
NaN ===NaN; //false
Object.is(+0,-0); //false
Object.is(NaN,NaN); //true
5. Object.assign()
**Object.assign方法用于将源对象的所有可枚举属性复制到目标对象**。它至少要有两个对象作为参数。第一个参数是目标对象,后面都是源对象。只要有一个参数不是对象,都会报错。
var a={a:1,b:1};
var b={b:2,c:2};
var c={c:3};
Object.assign(a,b,c);//{a:1,b:2,c:3}
用途:
为对象添加属性
为对象添加方法
克隆对象
合并多个对象
为属性指定默认值
6. 属性的遍历
ES6一共有6种方法可以遍历对象的属性。
for…in
循环遍历对象自身的和继承的可枚举属性。(不包含Symbol属性)
Object.keys(obj)
返回一个数组,包括对象自身的(不包含继承的)所有可枚举属性。(不包含Symbol属性,但是包含不可枚举属性)
Object.getOwnPropertySymbol(obj)
返回一个数组,包含对象自身的所有Symbol属性。
Object.getOwnPropertyNames(obj)
返回一个数组,包含自身的所有属性,不包括Symbol,但是包括不可枚举属性。
Reflect.ownKeys(obj)
返回一个数组,包含对象自身的所有属性,不管属性名是Symbol或字符串,也不管是否可枚举
Reflect.enumerate(obj)
返回一个Iterator对象,遍历对象自身的和继承所有可枚举属性(不包含Symbol属性),与for…in相同
7. _proto_属性
用来读取或设置当前对象的prototype对象。
在实现上_proto_调用的是Object.prototype.proto