js 陣列引用 發現的問題

2022-02-09 16:57:40 字數 870 閱讀 7110

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

//

原始:a=[1,2,3,4,5,.........];

//臨時:

var b =a ;

//操作:

b[b.length] = 1 ;

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

其中有這樣乙個例子:

//

結論:陣列對陣列是引用型別,陣列對變數是值型別

其中乙個仁兄給出了解釋:

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引用型別 陣列

今天無由的在部落格上開了乙個 隨寫知識點總結 目的呢,就是想每次遇到基礎知識點,會積累系統全面的總結知識點,加深自己的根基,也方便 以後的知識複習及查詢。切入正題,今天個人總結的是js資料型別的引用型別的array物件 陣列是值的有序集合,而且可以存放js各種資料型別,因為js是弱型別的語言,所以不...

js引用jquery問題

jquery本身就是乙個j ascript函式庫,所以可以直接在js檔案中寫jquery 但需要注意 jquery的使用需要引用官方的jquery.js檔案。關鍵 獨立的js檔案不需要引用任何jquery.js檔案,只需要在相應的html網頁中引用jquery.js和.js檔案,jquery檔案引用...

關於js檔案引用後不生效的原因發現

今天在編寫gojs的demo時遇到乙個奇葩問題,在jsp頁面底部引用js檔案時不生效,在引用的js中使用console.log 111 驗證,始終沒有列印,直接將js 寫在jsp中反而生效,網上檢視了許多辦法 將js放在body標籤內引用,不生效!將jquery引用刪去,不生效!修改標籤,也不生效!...