js 數組引用 發現的問題

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   ar   資料   sp   div   

最近做項目時,要對返回的資料[儲存在json數組中]做一次修改,但原資料要保留一次做備用。首先想到,原資料不動,用一個臨時的變數來修改,大致模型就是這樣:

// 原始:a=[1,2,3,4,5,.........];// 臨時:var b = a ;// 操作:b[b.length] = 1 ;

本來覺得是一個很簡單的問題。但測試時候發現,並沒得到想要的結果。測了很久才找到問題:a資料居然也跟著b的操作一起發生了改變,怎麼都想不通。問了同事,貌似他沒遇到過,也搞不清楚怎麼回事。只好求助網路查詢。查到了一個跟我相似的問題。

其中有這樣一個例子:

<script>     var a=[1,2,3,4];    //例子1   var b=a;       alert(a);   //1234       alert(b);   //1234 //例子2  var c=a;      c[3]=5;      alert(c);   //1235      alert(a);   //1235 //例子3  var d=a[1];      d=10;      alert(a);   //1234</script>    //結論:數組對數組是參考型別,數組對變數是實值型別

其中一個仁兄給出瞭解釋:

JS中沒有指標,只有傳值(value)與傳址(reference引用)的區別

var a = [1,2,3,4]   //a不僅是數組,還是個對象,實際上a就是對[1,2,3,4]的引用
var b=a 
var c=a
           //以上兩條指派陳述式建立了b與c 對a即[1,2,3,4]的引用,無論改變a 還是b抑或c 都是對[1,2,3,4]的操作,這就是傳址(堆中操作)

var d=a[1]      //則是把a[1]的值"1"傳遞給d,對d的改變則不會影響a[1],即所謂的傳值(棧中操作)

 這才有點明白。還是用原文的結論:

 js數組是參考型別,它只允許通過索引來擷取或改變數組的值 參考型別的東西都是不能通過(它賦值過的外部變數)所改變的  也就是(它賦值過的外部變數)這個值改變了原數組不會有任何變化

 

原文點這裡

js 數組引用 發現的問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.