[英]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的值,它記錄不同的值。 按照其標准,兩個數組都應返回值。
- 那么為什么返回不同的數組值呢?
另一種情況
var ary = [1,2,3];
var dupAry = ary;
//No I gonna apply splice method to the ary.
ary.splice(0,1);
現在,兩個數組都返回相同的值,並且可以在其標准下正常工作。
- 最后,為什么它不適用於第一種情況?
var dupAry = ary;
這將對ary
指向dupAry
的數組分配一個引用。 ary
和dupAry
現在都擁有一個指向同一數組對象的引用。 如果現在為ary
分配其他內容,則dupAry
將繼續保存指向數組對象的引用,而ary
現在將保留其他值。
通過為變量分配某些內容,您無需修改變量已保存的對象。 您正在修改變量保存的對象引用。
ary.splice(0,1)
這將修改兩個變量都指向的實際對象,因此都可以看到更改。
執行此操作時:
ary = [3,4,5];
...您沒有更改數組:您正在銷毀先前的引用,並使用全新的數組創建全新的變量*。 查看與以下內容的區別:
ary.push(99);
(*)當然,不是真正的新變量,我不知道該怎么寫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.