簡體   English   中英

JavaScript數組值轉換為變量

[英]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對象看不到它,換句話說,這兩個對象之間沒有直接鏈接,同一點適用於數組

Booleannullundefined值, StringNumber值稱為原始類型

當您分配原始類型的東西(即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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM