zoukankan      html  css  js  c++  java
  • 对象的扩展

    1、属性的简洁表示法

    es6 允许直接写入变量和函数,作为对象的属性和方法

    // 简洁表示法 ---> 变量
      let o=1;
      let k=2;
      let es5={
        o:o,
        k:k
      };
      let es6={
        o,
        k
      };
      console.log(es5,es6);   // {o:1, k:2}  {o:1, k:2}
    
    
    // 简洁表示法 ---> 函数
    let es5_method={
        hello:function(){
          console.log('hello');
        }
      };
      let es6_method={
        hello(){
          console.log('hello');
        }
      };
      console.log(es5_method.hello(),es6_method.hello());   // hello  hello

    2、属性名表达式

    js 定义对象的属性有两种方法

    // 方法一  字面量
    obj.foo = true;
    
    // 方法二  表达式
    obj['a' + 'bc'] = 123;

    es6 允许字面量定义对象时,用表达式作为对象的属性名,即把表达式放在方括号内

    let propKey = 'foo';
    
    let obj = {
      [propKey]: true,
      ['a' + 'bc']: 123
    };
    
    console.log(obj);   // {foo: true, abc: 123}
    
    let a='b';
      let es5_obj={
        a:'c',
        b:'c'
      };
    
    let es6_obj={
       [a]:'c'
    }
    
    console.log(es5_obj,es6_obj);   //  {a: "c", b: "c"} {b: "c"}

    3、Object.is()

    Object.is 方法用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致

    Object.is('foo', 'foo')   // true
    
    Object.is({}, {})   // false

    不同之处只有两个:一是+0不等于-0,二是NaN等于自身

    +0 === -0   // true
    NaN === NaN   // false
    
    Object.is(+0, -0)    // false
    Object.is(NaN, NaN)    // true

    4、Object.assign()

    Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)

    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}
    
    console.log(Object.assign({a:'a'},{b:'b'}))   // {a: "a", b: "b"}

    注意点:

    (1)、如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性

    var target = { a: 1, b: 1 };
    
    var source1 = { b: 2, c: 2 };
    var source2 = { c: 3 };
    
    Object.assign(target, source1, source2);
    target    // {a:1, b:2, c:3}

    (2)、如果只有一个参数,Object.assign会直接返回该参数

    var obj = {a: 1};
    Object.assign(obj) === obj    // true

    (3)、如果该参数不是对象,则会先转成对象,然后返回

    typeof Object.assign(2)    // "object"

    (4)、由于undefined和null无法转成对象,所以如果它们作为参数,就会报错

    Object.assign(undefined)    // 报错 Cannot convert undefined or null to object
    Object.assign(null)    // 报错 Cannot convert undefined or null to object

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

    var obj1 = {a: {b: 1}};
    var obj2 = Object.assign({}, obj1);
    
    obj2.a.b    // 1
    
    
    var obj1 = {a: {b: 1}};
    var obj2 = Object.assign({}, obj1);
    
    obj1.a.b = 2;
    obj2.a.b    // 2

    上面代码中,源对象obj1的a属性的值是一个对象,Object.assign拷贝得到的是这个对象的引用。这个对象的任何变化,都会反映到目标对象上面

  • 相关阅读:
    groovy脚本语言基础1
    014.Ansible Playbook Role 及调试
    013.Ansible Playbook include
    012.Ansible高级特性
    011.Ansible条件语句
    010.Ansible_palybook 循环语句
    009.Ansible模板管理 Jinja2
    008.Ansible文件管理模块
    007.Ansible变量Fact,魔法变量和lookup生成变量
    006.Ansible自定义变量
  • 原文地址:https://www.cnblogs.com/rogerwu/p/7460698.html
Copyright © 2011-2022 走看看