拷贝不要用于对象
浅拷贝:拷贝的是内存地址,不管修改拷贝前或者拷贝后,两者都会改变。
深拷贝:新创建一个对象,使用循环,把拷贝前的每一项拷贝给新对象,不管修改拷贝前或者拷贝后,两者都不会受影响。
// 基本类型:String Number Boolean null undefined symbol // 引用类型: Object(Array function(但函数不可用) Data) // 深拷贝和浅拷贝适用于引用类型 // 基本类型是存储在栈内存中,引用类型是存储在堆内存中(栈内存中存储的是堆内存中的引用地址) //浅拷贝 引用类型拷贝的内存地址,只拷贝是一层, let a = [1, 2, 3] let b = a; a[0] = 4; console.log(b); // 深拷贝 拷贝所有 深拷贝是新创建一个对象 把需要拷贝的对象中的每一项 拷贝一份 给新对象 var obj = { name: "rql" } var obj2 = {}; for (let i in obj) { obj2[i] = obj[i]; } obj.name = "rqy"; console.log(obj); console.log(obj2); console.log(obj2.name); // json格式也是对象 var p = { "id": "007", "name": "刘德华", "books": new Array('三国演义', '水浒传', '西游记') } var p2 = {} for (var key in p) { if (typeof p[key] == 'object') { //判断是否是引用类型 p2[key] = []; //创建一个新数组,来存储拷贝的数据 for (var i in p[key]) { p2[key][i] = p[key][i]; } } else { p2[key] = p[key] } } p.id = "008"; p2.books[0] = "四国"; console.log(p); console.log(p2);