对于此博文的整理
1 Object.is()方法
类似于js中的 === 比较方法。但是有些许区别
+0 === -0 //true;
NaN === NaN //false;
Object.is({a:3},{a:3}); // false
Object.is(NaN,NaN) //true;
Object.is(+0,-0); //false;
2 Object.assign()
用于对象的合并,将原对象的所有可枚举属性复制到目标对象。
第一个参数是目标对象,后面的参数都是原对象。
var target = { a: 1 };
var source1 = { b: 2 };
var source2 = { c: 3 };
Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}
注意点,
Object.assign方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。
var obj1 = {a: {b: 1}};
var obj2 = Object.assign({}, obj1);
obj1.a.b = 2;
obj2.a.b // 2
3 对象属性的可枚举性和遍历。
- ES5有三个操作会忽略enumerable为false的属性。
for...in循环:只遍历对象自身的和继承的可枚举的属性
Object.keys():返回对象自身的所有可枚举的属性的键名
JSON.stringify():只串行化对象自身的可枚举的属性
- ES6一共有5种方法可以遍历对象的属性。
(1)for...in
for...in循环遍历对象自身的和继承的可枚举属性(不含Symbol属性)
(2)Object.keys(obj)
Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性)。
var obj = { a : 3 };
var c = function(){
this.b = 4;
}
c.prototype = obj;
var d = new c();
for( i in d ){
console.log( i );
}
console.log(Object.keys(d));
4 proto属性
proto属性(前后各两个下划线),用来读取或设置当前对象的prototype对象。目前,所有浏览器(包括IE11)都部署了这个属性。
var obj = {
method: function() { ... }
};
obj.__proto__ = someOtherObj;
- 可以通过Object.getPrototypeOf()来取得object中的proto
var a = {
b : 3
}
console.log(Object.getPrototypeOf(a));
- 可以通过Object.setPrototypeOf()来进行设置。
var a = {
a : 1
}
var proto = {
b : 2,
c : 3
}
Object.setPrototypeOf(a,proto);
console.log(a);
/*
Object {a:1}
a:1
__proto__:Object
b:2
c:3
*/
5 Object.keys(), Object.values(),Object.entries(),
- Object.keys()
ES5引入了Object.keys方法,返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名。
var obj = { foo: "bar", baz: 42 };
Object.keys(obj)
// ["foo", "baz"]
- Object.values()
Object.values方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值。
var obj = { foo: "bar", baz: 42 };
Object.values(obj)
// ["bar", 42]
- Object.entries()
Object.entries方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对数组。
var obj = { foo: 'bar', baz: 42 };
Object.entries(obj)
// [ ["foo", "bar"], ["baz", 42] ]
Object.getOwnPropertyDescriptors();
- ES5有一个Object.getOwnPropertyDescriptor方法,返回某个对象属性的描述对象(descriptor)。
var obj = { p: 'a' };
Object.getOwnPropertyDescriptor(obj, 'p')
// Object { value: "a",
// writable: true,
// enumerable: true,
// configurable: true
// }
- ES7有一个提案,提出了Object.getOwnPropertyDescriptors方法,返回指定对象所有自身属性(非继承属性)的描述对象。
const obj = {
foo: 123,
get bar() { return 'abc' }
};
Object.getOwnPropertyDescriptors(obj)
// { foo:
// { value: 123,
// writable: true,
// enumerable: true,
// configurable: true },
// bar:
// { get: [Function: bar],
// set: undefined,
// enumerable: true,
// configurable: true } }
Object.getOwnPropertyDescriptors方法返回一个对象,所有原对象的属性名都是该对象的属性名,对应的属性值就是该属性的描述对象。
网友评论