[英]JavaScript array value to variable
我試圖進入Fuse來創建移動應用程序,並且他們使用JavaScript作為其邏輯。 我以前從未使用過JavaScript,最近才完成他們的入門課程。 大部分內容都很容易理解,但是我在它們使用變量的方式上遇到了麻煩。 如果有人可以解釋變量在JavaScript中的行為,那將是很好的。
因此,我遇到的問題如下:
for (var i = 0; i < hikes.length; i++){
// A new variable gets the value of the array
var hike = hikes[i];
if (hike.id == id){
// The variable gets a new value
hike.name = "foo";
break;
}
}
因此,在我對編程的理解中,數組加息應該保持不變,只有變量加息應將foo作為名稱值。 但實際上,該數組現在還具有名稱foo。
我猜該變量可以用作指向數組值地址的指針,但是也許有人可以幫助我更好地理解該概念。
是的,您是對的,對象和數組始終作為引用傳遞:
a = {}; // empty object
b = a; // references same object
b.foo = 'bar';
a.foo; // also 'bar'
您可以使用JSON.parse(JSON.stringify(hikes));
創建數組的深層副本JSON.parse(JSON.stringify(hikes));
然后使用該復制的數組進行操作:
var hikes = [ { 'id': 10 } ]; var id = 10; var tempHikes = JSON.parse(JSON.stringify(hikes)); for (var i = 0; i < tempHikes.length; i++){ // A new variable gets the value of the array var hike = tempHikes[i]; if (hike.id == id){ // The variable gets a new value hike.name = "foo"; console.log('hike is ', hike); break; } } console.log(hikes);
javascript中的數組是通過引用傳遞的,每當您修改數組中的元素時,更改都會在您訪問該數組的任何地方發生,為避免此類問題,您必須使用Array.from(arg)
從arg
創建一個新數組參數。 這也適用於對象,為避免對象出現此類問題,您必須使用Object.create(obj)
從obj
參數創建新的obj,也可以使用let newObj = Object.assign( {} , obj )
您對newObj
的成員進行了任何修改,但obj
對象看不到它,換句話說,這兩個對象之間沒有直接鏈接,同一點適用於數組
Boolean
, null
, undefined
值, String
和Number
值稱為原始類型 。
當您分配非原始類型的東西(即arrays , 函數和對象)時,您正在存儲對該類型的引用 。 這意味着hikes[i]
包含對該對象的引用 ,其中引用 大致表示指向該對象在內存中的位置的指針。
當您指定hike = hikes[i]
您將復制參考而不是實際對象。 因此,實際上, hike
仍然指向與hikes[i]
相同的對象,因此在兩種情況下都可以看到對該對象的任何更改。
如果要復制基礎對象,則有不同的方法。 其中之一是Object.assign :
var hike = Object.assign({}, hikes[i])
這是因為通過引用。 您需要做的就是創建一個可以使用的新對象(字符串,數字...)。
for (var i = 0; i < hikes.length; i++){ var hike = hikes.slice(i,i+1)[0]; if (hike.id == id){ hike.name = "foo"; break; } }
切片還會創建深層副本。 您可以使用拼接或分配或(((key1,key2)=>(key1,key2))(obj)等
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.