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