这篇看看Object对象新添加的一些API。
1)Object.is ( value1, value2 )
使用===判断两个value是否相等,两个例外,NaN等于NaN,-0不等于+0。
var x = NaN, y = 0, z = -0;
x === x; // false
y === z; // true
Object.is( x, x ); // true
Object.is( y, z ); // false
2)Object.getOwnPropertySymbols( O )
返回对象Symbol类型的key。
3)Object.setPrototypeOf ( O, proto )
设置对象的隐式原型。
var o1 = {
foo() { console.log( "foo" ); }
};
var o2 = {};
Object.setPrototypeOf( o2, o1 );
o2.foo(); // foo
var o1 = {
foo() { console.log( "foo" ); }
};
var o2 = Object.setPrototypeOf( {}, o1 );
o2.foo();
4)Object.assign ( target, ...sources )
对象的浅拷贝,把sources对象的内容拷贝到target,忽略Symbol类型的key,不能枚举的key,父对象中的key
var target = {},
o1 = { a: 1 }, o2 = { b: 2 },
o3 = { c: 3 }, o4 = { d: 4 };
Object.defineProperty( o3, "e", {
value: 5,
enumerable: true,
writable: false,
configurable: false
} );
Object.defineProperty( o3, "f", {
value: 6,
enumerable: false
} );
o3[ Symbol( "g" ) ] = 7;
Object.setPrototypeOf( o3, o4 );
Object.assign( target, o1, o2, o3 );
target.a; // 1
target.b; // 2
target.c; // 3
target.e; // 5
Object.getOwnPropertyDescriptor( target, "e" );//Object {value: 5, writable: true, enumerable: true, configurable: true}
*以上全部代码在Chrome 48下通过测试