js深浅拷贝

3.3 对象的浅拷贝–Object.assign !!!

这里的Object.assign也是一个很奇怪的点,它既是深拷贝又是浅拷贝。一级属性-深拷贝,深层属性-浅拷贝


var obj = { a: 0 , b: { c: 0}}; 

var newObj = Object.assign({}, obj); 



obj.a = 1; 

obj.b.c = 3; 

console.log(obj);        // { a: 1 , b: { c: 3}}; 

console.log(newObj);	// { a: 0 , b: { c: 3}}; 

可以很清楚的发现一级深拷贝,二级浅拷贝。



3.4 对象的浅拷贝-- 展开运算符(…)!!!

这里的展开运算符(…)同样是一个很奇怪的点,它既是深拷贝又是浅拷贝。一级属性-深拷贝,深层属性-浅拷贝


var obj = { a: 0 , b: { c: 0}}; 

var newObj = {...obj}; 



obj.a = 1; 

obj.b.c = 3; 

console.log(obj);        // { a: 1 , b: { c: 3}}; 

console.log(newObj);	// { a: 0 , b: { c: 3}}; 

可以很清楚的发现一级深拷贝,二级浅拷贝。



4. 深拷贝

在浅拷贝中已经介绍而来几种深拷贝的方式。

4.1 JSON.parse(JSON.stringify())

数组和对象均可用

数组


var arr = [1, 3, {

    name: ' syl'

}];

var newArr = JSON.parse(JSON.stringify(arr));

arr[2].name = '123'; 

console.log(newArr[2]); /// 'syl ' 没有改变





对象


var obj={

	name:'syl',

}

var newObj=JSON.parse(JSON.stringify(obj));

obj.name="123";

console.log(newObj.name); //'syl'. 没有改变



这种方法虽然可以实现数组或对象深拷贝,但不能处理函数


var  arr = [1, 3, {

    name: ' syl'

},function(){}];

var newArr = JSON.parse(JSON.stringify(arr));



console.log(newArr[3]) // null ,没有输出函数。



这是因为JSON.stringify() 方法是将一个JavaScript值(对象或者数组)转换为一个 JSON字符串,不能接受函数

4.2 深拷贝通用–递归

function deepCopy(obj) {

  //是否是数组或对象

  if (typeof obj !== 'object') return; 

  

  var newObj = obj instanceof Array ? [] : {};

  

  for (var key in obj) {

  

    	// 不遍历原型链上的属性,只遍历自身属性

    if (obj.hasOwnProperty(key)) {

    

    	 // 如果值是对象,就递归一下

      if (obj[keys] && typeof obj[key ] === "object") {

       

        newObj[key] = obj[key] instanceof Array ?[] : {};

        // 如果是引用数据类型,会递归调用

        newObj[key] =  deepCopy(obj[key]);

      } else {

      

        // 如果不是,就直接赋值

        newObj = obj[keys];

        

      }

    }

  }

  return result;

}







补充:

浅拷贝:es6中有两种新方法

方法1:


` let [...spread]= [12, 5, 8, 130, 44];



方法2:


Array.from(array)//创建一个新数组



前端资料汇总

我一直觉得技术面试不是考试,考前背背题,发给你一张考卷,答完交卷等通知。

首先,技术面试是一个 认识自己 的过程,知道自己和外面世界的差距。

更重要的是,技术面试是一个双向了解的过程,要让对方发现你的闪光点,同时也要 试图去找到对方的闪光点,因为他以后可能就是你的同事或者领导,所以,面试官问你有什么问题的时候,不要说没有了,要去试图了解他的工作内容、了解这个团队的氛围。
找工作无非就是看三点:和什么人、做什么事、给多少钱,要给这三者在自己的心里划分一个比例。
最后,祝愿大家在这并不友好的环境下都能找到自己心仪的归宿。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值