簡體   English   中英

Javascript數組奇怪的行為

[英]Javascript array strange behaviour

據js約定,據我所知

  • 原始數據類型在按值傳遞和
  • 復雜數據類型通過引用傳遞進行工作

如果是這樣

var ary = [1,2,3];
var dupAry = ary;
//Now I am going to rewrite the ary variable as follows
ary = [3,4,5];

現在,我記錄ary和dupAry的值,它記錄不同的值。 按照其標准,兩個數組都應返回值。

  1. 那么為什么返回不同的數組值呢?

另一種情況

    var ary = [1,2,3];
    var dupAry = ary;
    //No I gonna apply splice method to the ary.
    ary.splice(0,1);

現在,兩個數組都返回相同的值,並且可以在其標准下正常工作。

  1. 最后,為什么它不適用於第一種情況?
 var dupAry = ary; 

這將對ary指向dupAry的數組分配一個引用。 arydupAry現在都擁有一個指向同一數組對象的引用。 如果現在為ary分配其他內容,則dupAry將繼續保存指向數組對象的引用,而ary現在將保留其他值。

通過為變量分配某些內容,您無需修改​​變量已保存的對象。 您正在修改變量保存的對象引用。

 ary.splice(0,1) 

這將修改兩個變量都指向的實際對象,因此都可以看到更改。

執行此操作時:

ary = [3,4,5];

...您沒有更改數組:您正在銷毀先前的引用,並使用全新的數組創建全新的變量*。 查看與以下內容的區別:

ary.push(99);

(*)當然,不是真正的新變量,我不知道該怎么寫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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