请教下面这段代码具体如何执行

相关代码

var des = 1; 
var obj = {b: 2}; 

for(var key in obj) {     
    console.log(des, key); // 1, "b"
    des[key] = obj[key];   // ???
    console.log(des[key]); // undefined
}

问题

des[key] = obj[key] 这句如何执行? 代码并没有报错, 但des[key]打印结果是undefined

代码来源

function deepCopy(des, src) {
    if(!src || typeof src !== 'object') {
        return des;
    }

    for (var key in src) {
        let obj = src[key];
        if(obj && typeof obj === 'object') {
            des[key] = des[key] || {};
            deepCopy(des[key], obj);
        } else {
            des[key] = src[key];
        }
    }

    return des;
}

console.log(deepCopy({a: 1}, {a: {b: 2}}));  // {a: 1}
console.log(deepCopy({a: {}}, {a: {b: 2}})); // {a: {b: 2}}
阅读 1.3k
2 个回答

代码来源,des[key] = des[key] || {};
des[key]已经是一个对象了,是一个引用类型

你自己的例子,des是一个非引用类型是不可以直接[key]

友情提示:代码来源这种clone是有问题的。
可参考:https://segmentfault.com/a/11...

string是原始数据类型, js原始数据类型是不可被改变的,相对的,引用类型数据是可以被改变,如object

推荐问题
宣传栏