javascript關於forEach使用方式

以前一直都理解錯了,覺得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

相關文章
相關標籤/搜索