美文网首页
Object.assign()方法的使用

Object.assign()方法的使用

作者: 小龙虾Julian | 来源:发表于2020-04-13 18:04 被阅读0次
    1、基本概念

    该方法用来将一个或多个源对象(source)的所有可枚举属性复制到目标对象(target),并返回目标对象

    2、基本语法
    Object.assign(target, ...source) //第一个参数代表目标对象,第二个之后的参数代表源对象
    
    3、基本用法

    (1)合并多个对象,如:

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

    (2)当目标对象和源对象中有同名属性时,或多个源对象有同名属性时,则后面的属性会覆盖前面的属性,如:

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

    (3)如果只有一个参数,则Object.assign()方法会直接返回该参数,如:

    let obj = {a: 1};
    console.log(Object.assign(obj)) //{a: 1}
    console.log(Object.assign(obj) === obj) // true
    

    (4)如果只有一个参数,即参数作为目标对象,并且不是对象,则先转换为对象,然后返回目标对象,如:

    console.log(Object.assign(1)) //[[PrimitiveValue]]: 2
    console.log(typeof Object.assign(1)) // "object"
    

    (5)如果只有一个参数,即参数作为目标对象,并且是undefined或null,由于undefined和null都无法转换成对象,所以会报错,如:

    Object.assign(undefined) //Uncaught TypeError: Cannot convert undefined or null to object
    Object.assign(null) //Uncaught TypeError: Cannot convert undefined or null to object
    

    (6)如果非对象参数出现在源对象位置(即非首参数),分两种情况,一是能转换成对象的先转换成对象,但是除了字符串会以数组形式拷贝到目标对象,其他值都不会有效果;二是如果无法转换成对象(如:undefined或null),则直接跳过,而不是报错,如:

    let obj = {a: 1};
    console.log(Object.assign(obj, true)) //{a: 1} 
    console.log(Object.assign(obj, 2)) //{a: 1} 
    console.log(Object.assign(obj, 'abc')) //{0: a, 1: b, 2: c} 
    console.log(Object.assign(obj, undefined) === obj) // true
    console.log(Object.assign(obj, null) === obj) // true
    

    之所以只有字符串会以数组形式拷贝到目标对象是因为:字符串的包装对象,会产生可枚举属性,如:

    console.log(Object(true)) 
    console.log(Object(2))
    console.log(Object('abc')) 
    

    输出结果为:


    布尔值、数值、字符串的包装对象.png

    从上面结果可以看出:布尔值、数值、字符串分别转成对应的包装对象,它们的原始值都在包装对象的内部属性 [[PrimitiveValue]]上面,这个属性是不会被Object.assign拷贝的,只有字符串的包装对象会产生可枚举的实义属性,那些属性则会被拷贝。

    注:Object.assign()方法只拷贝源对象的自身属性,不拷贝继承属性和不可枚举的属性

    相关文章

      网友评论

          本文标题:Object.assign()方法的使用

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