[英]am trying to learn Linked list and i don't know why there is a loop in my object
我希望它運行一次,但 obj2.b 中有一個對象循環一個接一個。 為什么它不調用它一次?:
const test2 = function (numb) {
//making an object
let obj1 = {
a: 1,
b: 2,
};
let obj2 = {
d: numb,
e: null,
};
let obj3 = obj2;
obj3.b = obj2;
console.log(obj3);
};
test2(3);
在 JavaScript 中,對象是通過引用分配的。 這意味着let obj3 = obj2
導致obj3
和obj2
指向相同的 object。也就是說,如果您更改obj3
,您將更改 memory obj2
引用(因為它們引用相同的位置),從而更改obj2
。 簡而言之obj2
和obj3
是同一個對象! . 可視化:
let obj1 = {a: 0};
let obj2 = obj1;
//obj1 and obj2 = {a: 0};
obj2.b = 1;
//obj1 and obj2 = {a: 0, b: 1};
考慮到對象在 JavaScript 中的工作方式,您可以快速計算出事實上,將obj2
初始化為obj3.b
的值與執行obj3.b = obj3
obj3 相同,這顯然是一個循環。 因為每次分配obj3
時,您還必須將其分配給obj3.b
,然后再分配給obj3.bb
,依此類推。
如果初始化 object 應該是另一個標准方法的副本不能按預期工作,如何正確執行? 最簡單的方法是在空的 object 上使用Object.assign()
,這樣我們就創建了一個全新的引用,指向一個全新的 object,並通過這個新引用分配所有數據。
let obj1 = {a: 0};
let obj2 = Object.assign({}, obj1);
//obj1 = {a: 0}
//obj2 = {a: 0}
obj2.b = 1;
//obj1 = {a: 0}
//obj2 = {a: 0, b: 1}
不要使用=
將obj2
定義為obj3
(如您現在所知,會將它們都引用到同一個對象),而是使用上面提到的方法:
const test2 = function (numb) {
//making an object
let obj1 = {
a: 1,
b: 2,
};
let obj2 = {
d: numb,
e: null,
};
let obj3 = {};
obj3 = Object.assign(obj3, obj2);
/**
* You can do it in one line too
* let obj3 = Object.assign({}, obj2);
*/
obj3.b = obj2;
console.log(obj3);
};
test2(3);
//{ d: 3, e: null, b: { d: 3, e: null } }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.