zoukankan      html  css  js  c++  java
  • 【ES6】对象的新增方法

    1.Object.is()

    它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致。
    
    Object.is('foo', 'foo')
    // true
    Object.is({}, {})
    // false

    2.Object.assign()

    Object.assign()方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。
    
    const target = { a: 1 };
    
    const source1 = { b: 2 };
    const source2 = { c: 3 };
    
    Object.assign(target, source1, source2);
    target // {a:1, b:2, c:3}
    Object.assign()方法的第一个参数是目标对象,后面的参数都是源对象。
    
    注意,如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。

    Object.assign()方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。

    3.Object.getOwnPropertyDescriptors()

    ES2017 引入了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: get bar],
    //      set: undefined,
    //      enumerable: true,
    //      configurable: true } }

    4.__proto__属性,Object.setPrototypeOf(),Object.getPrototypeOf() 

    __proto__属性
    __proto__属性(前后各两个下划线),用来读取或设置当前对象的原型对象(prototype)。目前,所有浏览器(包括 IE11)都部署了这个属性。
    
    // es5 的写法
    const obj = {
      method: function() { ... }
    };
    obj.__proto__ = someOtherObj;
    
    // es6 的写法
    var obj = Object.create(someOtherObj);
    obj.method = function() { ... };
    Object.setPrototypeOf()
    Object.setPrototypeOf方法的作用与__proto__相同,用来设置一个对象的原型对象(prototype),返回参数对象本身。它是 ES6 正式推荐的设置原型对象的方法。
    
    // 格式
    Object.setPrototypeOf(object, prototype)
    
    // 用法
    const o = Object.setPrototypeOf({}, null);
    Object.getPrototypeOf()
    该方法与Object.setPrototypeOf方法配套,用于读取一个对象的原型对象。
    
    Object.getPrototypeOf(obj);

    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)属性的键值。
    
    const obj = { foo: 'bar', baz: 42 };
    Object.values(obj)
    // ["bar", 42]
    Object.entries()
    Object.entries()方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对数组。
    
    const obj = { foo: 'bar', baz: 42 };
    Object.entries(obj)
    // [ ["foo", "bar"], ["baz", 42] ]
    Object.fromEntries()
    Object.fromEntries()方法是Object.entries()的逆操作,用于将一个键值对数组转为对象。
    
    Object.fromEntries([
      ['foo', 'bar'],
      ['baz', 42]
    ])
    // { foo: "bar", baz: 42 }
    该方法的主要目的,是将键值对的数据结构还原为对象,因此特别适合将 Map 结构转为对象。
    
    // 例一
    const entries = new Map([
      ['foo', 'bar'],
      ['baz', 42]
    ]);
    
    Object.fromEntries(entries)
    // { foo: "bar", baz: 42 }
    
    // 例二
    const map = new Map().set('foo', true).set('bar', false);
    Object.fromEntries(map)
    // { foo: true, bar: false }
    该方法的一个用处是配合URLSearchParams对象,将查询字符串转为对象。
    
    Object.fromEntries(new URLSearchParams('foo=bar&baz=qux'))
    // { foo: "bar", baz: "qux" }

    更多

  • 相关阅读:
    Weak Event模型
    Dispatcher Queue性能分析
    WPF中ControlTemplate,ItemsPanelTemplate ,DataTemplate
    事件与委托
    DataGrid: 数据项更新并保持多选
    【C#学习笔记】using 三种使用方式
    Python快捷键
    比特率和波特率
    c#winform程序退出的方法
    C#socket通信-----多线程
  • 原文地址:https://www.cnblogs.com/lbonet/p/14410929.html
Copyright © 2011-2022 走看看