JS高级——Object、浅拷贝、深拷贝

JS高级——Object、浅拷贝、深拷贝
摘要由CSDN通过智能技术生成

Object

数据属性包含四个特征:

        1.configurable:表示能否对该属性进行配置,比如使用delete删除,能否修改属性特征等。默认为true。

        2.enumerable:表示能否被枚举,比如是否可以用for-in循环获取属性,默认为true。

        3.writeable:表示是否可写,是否能修改属性的值。默认为true。

        4.value:包含属性的数据值,默认为undefined。

访问器属性包含四个特征

        1.get:读取属性时

        2.set:设置属性时

        3.configurable:表示能否通过delete删除此属性,能否修改属性的特征,或能否修改把属性修改为访问器属性,默认为true

        4.enumber:表示该属性是否可枚举,即是否通过for-in循环或Object.keys()返回属性,默认为true

	//设置对象属性的静态参数    
	Object.defineProperty(obj, 'a', {
      value:123,
      writable:true,
      configurable: true,
      enumerable: false,
    })
	//设置对象属性的访问器参数
    Object.defineProperty(obj, 'a', {
      get: () => {
        //这里不能使用this.a来访问属性a。会造成死循环
        //a认为是当前访问器内的局部变量
        return a;
      },
      //obj.a = 456;
      //n 就是接收456的
      set: (n) => {
        a = n;
      },
      configurable: true,
      enumerable: false,
    })

	

	//一次设置多个属性
    Object.defineProperties(obj,{
      'a':{},
      'b':{}
    })

defineProperty设置对象的属性时,如果设置为访问器,则不能同时设置静态属性。

defineProperty设置属性或访问器时,除了get、set之外,其他的属性默认是false。

  //此时没有设置configurable、enumerable、writable默认值都是false
	Object.definePropertie(obj,'a' {
      value: 1
    })

对象方法

    var a = { a: 1, b: 2 };
    var b = { b: 4, c: 5 };
    var c = Object.assign(a, b)
    console.log(
      a === c//true,assign方法会直接修改a,并且返回值就是a
    )
	//assign方法,通常用来做对象的合并或克隆
    var obj = { a: 1, b: 2 };
    // 浅拷贝
    var obj2 = Object.assign({}, obj);
    //深拷贝
    var obj2 = JSON.parse(JSO
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
浅拷贝深拷贝是针对JavaScript中的对象属性为对象的情况而言的。浅拷贝只是复制了对象的引用,也就是复制了内存地址,所以拷贝后的对象和原对象会共用同一个内存地址,属性值的改变会相互影响。而深拷贝则是创建了一个完全独立的对象,拷贝了所有的属性和属性值,所以拷贝后的对象和原对象是完全独立的,互不影响。 在JavaScript中,可以通过不同的方法实现浅拷贝深拷贝浅拷贝可以使用手动实现、Object.assign()和拓展运算符等方法。手动实现的浅拷贝方法是遍历原始对象的属性,将属性值赋给新对象。Object.assign()方法可以将一个或多个源对象的属性复制到目标对象中,也可以用于实现浅拷贝。拓展运算符(...)也可以用于实现浅拷贝深拷贝则需要递归地复制对象的属性和属性值。可以通过手动实现一个深拷贝函数,在遍历原始对象的属性时,如果属性值是对象类型,则递归调用深拷贝函数进行复制。这样可以创建一个完全独立的对象,拷贝了所有的属性和属性值。 总结起来,浅拷贝只是复制了对象的引用,而深拷贝是创建了一个完全独立的对象。使用不同的方法可以实现浅拷贝深拷贝,根据具体的需求选择合适的方法进行使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [JavaScript深拷贝浅拷贝概念与用法实例分析](https://download.csdn.net/download/weixin_38735570/14820137)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [javascript深拷贝浅拷贝](https://blog.csdn.net/weixin_47417033/article/details/124899204)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值