ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

$.extend 与Object.assign的相同与不同

2022-01-11 01:03:07  阅读:218  来源: 互联网

标签:weight extend Object object1 test var 拷贝 assign apple


一、相同点:

  • 函数用于将一个或多个对象的内容合并到目标对象。
  • 都可以用于浅拷贝

$.extend(target ,defaults, options) 与Object.assign(target ,defaults, options)

浅拷贝:

1、$.extend(target ,defaults, options):

1.1、对浅层属性:

var object1 = {
        apple: 0,
        banana: {weight: {test:1}, price: 100},
        cherry: 97
    };
    var b = $.extend({},object1)
    object1.apple = 2;
    console.log(b)

var object1 = {
        apple: 0,
        banana: {weight: {test:1}, price: 100},
        cherry: 97
    };
    var b = $.extend({},object1)
    object1.banana.weight.test = 2;
    console.log(b)

2.Object.assign(target ,defaults, options)

2.1对浅层属性:

var object1 = {
        apple: 0,
        banana: {weight: {test:1}, price: 100},
        cherry: 97
    };
    var b = Object.assign({},object1)
    object1.apple = 2;
    console.log(b)

对object1内部浅层属性apple的修改对b没有影响。

2.2、对深层属性

var object1 = {
        apple: 0,
        banana: {weight: {test:1}, price: 100},
        cherry: 97
    };
    var b = Object.assign({},object1)
    object1.banana.weight.test = 2;
    console.log(b)

对object1内部深层属性test的修改对b有影响。

二、不同点:

$.extend(true, target ,defaults, options) 可用于深拷贝
$.extend(true,{},a,b)

true:是否深度拷贝,不加为false,浅拷贝,加了深拷贝
{}:将合并结果保存到新对象,这样原对象将不会发生改变
a:第一个合并的对象
b:第二个合并的对象

深拷贝:

var object1 = {
        apple: 0,
        banana: {weight: {test:1}, price: 100},
        cherry: 97
    };
    var b = $.extend(true,{},object1)
    object1.banana.weight.test = 2;
    console.log(b)

对object1内部深层属性test的修改对b没有影响;


  1. Object.assign()方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象

Object.assign(targetobj, sources1, source2)

总结:Object.assign()对1级属性的拷贝属于神拷贝,对2级对象的拷贝属于浅拷贝。如果要使用深拷贝。可以借助loadsh中的cloneDeep()方法https://www.lodashjs.com/docs/lodash.cloneDeep

标签:weight,extend,Object,object1,test,var,拷贝,assign,apple
来源: https://www.cnblogs.com/liliuyu/p/15786612.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有