課程
/前端開發(fā)
/HTML/CSS
/直面JavaScript中的30個疑難雜癥
老師,我用你的淺拷貝的方式,但是不對啊,打印出來兩個對象不一樣,按說淺拷貝打印出來是一樣的,您幫我看一眼
2022-01-06
源自:直面JavaScript中的30個疑難雜癥 2-5
正在回答
你改變的值是字符串屬于原始數據類型,打印出來當然不一樣啦,改變對象里面的值打印出來是一樣的
qq_憶擱淺_6
蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222
因為你的a/b是基本類型,這位老師說的淺拷貝的定義不太精確,如果按他的定義的話直接定義const objNew = obj都可以實現他定義的淺拷貝了。
但淺拷貝的意思應該是只拷貝第一層的基本類型數據,其他類型直接引用,你改的是對象里的基本數據類型,所以是可以的。但如果你加一個復雜類型,就像視頻說的那樣了。
var obj = {
? ? ? ? ? ? a: "hello",
? ? ? ? ? ? b: {
? ? ? ? ? ? ? ? a:'world',
? ? ? ? ? ? ? ? b: 111
? ? ? ? ? ? },
? ? ? ? ? ? c: [11, "jack", "tom"]
? ? ? ? }
? ? ? ? function simpleClone (objNew) { // ?淺拷貝
? ? ? ? ? ? var obj = {};
? ? ? ? ? ? for (var i in objNew) {
? ? ? ? ? ? ? ? obj[i] = objNew[i]
? ? ? ? ? ? }
? ? ? ? ? ? return obj;
? ? ? ? var objCopy = simpleClone(obj);
? ? ? ? objCopy.b.a = "word1" // 引用類型 淺拷貝
? ? ? ? objCopy.a = "word1234" ?// 原始類型 深拷貝
? ? ? ? console.log(obj);
? ? ? ? console.log(objCopy);
舉報
直面JavaScript中的30個疑難雜癥
1 回答js深淺拷貝的定義問題
1 回答待拷貝的對象不能包含方法?
2 回答遍歷的深拷貝能不能講一下其中的原理,迭代那里
2 回答如果兩個構造函數的prototype都指向同一對象,那么這個對象的construtctor 會指向哪個構造函數?
5 回答還是不理解,c和d的key一樣?c的key不是1么?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優(yōu)惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2022-09-21
你改變的值是字符串屬于原始數據類型,打印出來當然不一樣啦,改變對象里面的值打印出來是一樣的
2022-04-29
蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222?蜘蛛俠@xh1222
2022-02-22
因為你的a/b是基本類型,這位老師說的淺拷貝的定義不太精確,如果按他的定義的話直接定義const objNew = obj都可以實現他定義的淺拷貝了。
但淺拷貝的意思應該是只拷貝第一層的基本類型數據,其他類型直接引用,你改的是對象里的基本數據類型,所以是可以的。但如果你加一個復雜類型,就像視頻說的那樣了。
2022-01-24
var obj = {
? ? ? ? ? ? a: "hello",
? ? ? ? ? ? b: {
? ? ? ? ? ? ? ? a:'world',
? ? ? ? ? ? ? ? b: 111
? ? ? ? ? ? },
? ? ? ? ? ? c: [11, "jack", "tom"]
? ? ? ? }
? ? ? ? function simpleClone (objNew) { // ?淺拷貝
? ? ? ? ? ? var obj = {};
? ? ? ? ? ? for (var i in objNew) {
? ? ? ? ? ? ? ? obj[i] = objNew[i]
? ? ? ? ? ? }
? ? ? ? ? ? return obj;
? ? ? ? }
? ? ? ? var objCopy = simpleClone(obj);
? ? ? ? objCopy.b.a = "word1" // 引用類型 淺拷貝
? ? ? ? objCopy.a = "word1234" ?// 原始類型 深拷貝
? ? ? ? console.log(obj);
? ? ? ? console.log(objCopy);