以前一直都理解錯了,覺得forEach能夠更改原數組裏的數據,舉個例子:前端
var a = [1,2,3,4,5]; a.forEach(item =>{ item = item*2 }) console.log(a); // a = [1,2,3,4,5] var b = [{b:1},{b:2},{b:3}]; b.forEach(item =>{ item.b = item.b*2 }) console.log(b) // b = [{b:2},{b:4},{b:6}]
明明是同樣的函數執行結果沒有達到本身須要的那樣,爲何呢?今天不當心踩到了這個坑。數組
緣由分析一下後也是很好理解的,由於a裏的數據都是基本類型,而b裏的數據是引用類型,基本類型在內存中的存在形式是散的,並無地址,因此你雖然*2了可是你不知道是哪一個*2了,若是說要a裏的數據都*2的話,你須要這樣寫:函數
var a = [1,2,3,4,5]; a.forEach((item,index,origin) =>{ origin[index] = item*2 }) console.log(a);
或者直接用map,接收返回的新數據。code
下面來討論一下數據類型:內存
數據類型主要分基本類型和引用類型,基本類型爲,number,boolean,undefined,null.string,而引用類型有object,array,function,string
在內存中基本類型是散的,而引用類型是相似門牌號同樣,有一個地址整齊的排列着,若是想找到某個引用類型,直接找到對應的地址便可,引用類型的門打開後,裏面又是一堆的基本類型,這個是我作前端這些年對數據類型的理解,望大佬門指點指點.it