美文网首页
对象方法

对象方法

作者: strong9527 | 来源:发表于2016-09-06 19:46 被阅读33次

    对于此博文的整理

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

    相关文章

      网友评论

          本文标题:对象方法

          本文链接:https://www.haomeiwen.com/subject/qjodettx.html