0
点赞
收藏
分享

微信扫一扫

js 浅拷贝和深拷贝(详细面试+代码)(20220318)

1kesou 2022-03-18 阅读 49
前端

目录

模拟:

1.面试题:

哪些是浅拷贝 哪些是深拷贝?

得到的是深拷贝还是浅拷贝?

 Object.assign() 得到的是深拷贝还是浅拷贝?

说一下如何得到深拷贝的对象 如何进行深拷贝?

2. 浅拷贝的实现方式有哪几种?(3种)

  第一种   赋值变量, 仅仅拷贝了栈内存地址

第二种   ES6 语法   ...拓展运算符

第三种   ES6   利用object.assign()的方式对对象进行合并

3.实现深拷贝的方式有哪几种?(2种)

1.用 JSON.stringify()   JSON.parse()的方式来进行实现

2. 递归实现深拷贝


模拟:

面试官经常问到的方式:

1.面试题:

哪些是浅拷贝 哪些是深拷贝?

得到的是深拷贝还是浅拷贝?

 Object.assign() 得到的是深拷贝还是浅拷贝?

说一下如何得到深拷贝的对象 如何进行深拷贝?

如果让你回答,你会如何进行回答呢!!!!!

原因 在下边:(深拷贝  浅拷贝  堆和栈的区分场景回答)

2. 浅拷贝的实现方式有哪几种?(3种)

  第一种   赋值变量, 仅仅拷贝了栈内存地址

 let arr = [1, 2, 3];
let arr2 = arr;      // 复制  拷贝   仅仅拷贝了栈内存地址
arr[1] = '我被修改了';
console.log("arr:", arr);
console.log("arr2:", arr2); */

第二种   ES6 语法   ...拓展运算符

 let arr = [1, 2, 3, ['a', 'b', 'c']];
let arr2 = [...arr];  // 浅拷贝
arr[3][1] = '我被修改了';
console.log("arr:", arr);
console.log("arr2:", arr2); */

第三种   ES6   利用object.assign()的方式对对象进行合并

let obj = {
    name: '苏星',
    age: 38,
    desc: {
        height: 150,
        weight: 200,
        zx: '漂亮'
    }
}
let obj2 = Object.assign({}, obj);
// obj['name'] = '张晨玥';
obj['desc']['zx'] = '漂亮?';
console.log("obj :", obj);
console.log('obj2:', obj2); */

3.实现深拷贝的方式有哪几种?(2种)

1.用 JSON.stringify()   JSON.parse()的方式来进行实现

let obj = {
    name: '苏星',
    age: 38,
    desc: {
        height: 150,
        weight: 200,
        zx: '漂亮'
    }
}
  console.log(JSON.stringify(obj), typeof JSON.stringify(obj));
let obj2 = JSON.parse(JSON.stringify(obj));    // 将对象进行深拷贝
obj['desc']['zx'] = '丑';
console.log("obj :", obj);
console.log("obj2:", obj2); 

2. 递归实现深拷贝

let obj = {
    name: '苏星',
    age: 38,
    desc: {
        height: 150,
        weight: 200,
        zx: '漂亮'
    }
}
function deepClone(obj) {
    let obj2 = {};
    if(obj instanceof Array) {
        obj2 = []
    }
    for(let key in obj) {
        // console.log("key:", key, obj[key]);
        if(typeof(obj[key]) === 'object' && obj[key] !== null ) {
            obj2[key] = deepClone(obj[key])
        } else {
            obj2[key] = obj[key]
        }
    }
    return obj2;
}
let obj2 = deepClone(obj);
obj['desc']['zx'] = '丑';
console.log("obj :", obj);
console.log("obj2:", obj2);
举报

相关推荐

0 条评论