对象方法

2016-09-06  本文已影响33人  strong9527

对于此博文的整理

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 对象属性的可枚举性和遍历。

for...in循环:只遍历对象自身的和继承的可枚举的属性
Object.keys():返回对象自身的所有可枚举的属性的键名
JSON.stringify():只串行化对象自身的可枚举的属性

(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;


var a = {
    b : 3
}

console.log(Object.getPrototypeOf(a));


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(),

ES5引入了Object.keys方法,返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名。


var obj = { foo: "bar", baz: 42 };
Object.keys(obj)
// ["foo", "baz"]

Object.values方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值。


var obj = { foo: "bar", baz: 42 };
Object.values(obj)
// ["bar", 42]

Object.entries方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对数组。


var obj = { foo: 'bar', baz: 42 };
Object.entries(obj)
// [ ["foo", "bar"], ["baz", 42] ]

Object.getOwnPropertyDescriptors();


var obj = { p: 'a' };

Object.getOwnPropertyDescriptor(obj, 'p')
// Object { value: "a",
//   writable: true,
//   enumerable: true,
//   configurable: true
// }


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方法返回一个对象,所有原对象的属性名都是该对象的属性名,对应的属性值就是该属性的描述对象。

上一篇 下一篇

猜你喜欢

热点阅读