专栏首页前端大白专栏javascript关于forEach使用方式

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,接收返回的新数据。

下面来讨论一下数据类型:

数据类型主要分基本类型和引用类型,基本类型为,number,boolean,undefined,null.string,而引用类型有object,array,function,

在内存中基本类型是散的,而引用类型是类似门牌号一样,有一个地址整齐的排列着,如果想找到某个引用类型,直接找到对应的地址即可,引用类型的门打开后,里面又是一堆的基本类型,这个是我做前端这些年对数据类型的理解,望大佬门指点指点.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • react-native icon使用方式

    杭州前端工程师
  • 关于css选择器的问题 + * ~这三个有什么区别

    杭州前端工程师
  • angular2 路由之间的页面跳转

    杭州前端工程师
  • 《Effective Java》——读后总结

    这本书在Java开发的行业里,颇有名气。今天总算是粗略的看完了...后面线程部分和序列化部分由于心浮气躁看的不仔细。这个月还剩下一周,慢慢总结消化。

    Java后端工程师
  • js == 和 ===

    FlyLolo
  • 深入解析js中基本数据类型与引用类型,函数参数传递的区别

    版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/articl...

    空空云
  • H3C的静态路由配置

    #Oct 11 20:08:28:820 2017 RT1 SHELL/4/LOGIN: 

    py3study
  • [PHP] 简单多进程并发

    陶士涵
  • 用Python获取自己的外网IP

    py3study
  • MySQL 高性能表设计规范

    良好的逻辑设计和物理设计是高性能的基石, 应该根据系统将要执行的查询语句来设计schema, 这往往需要权衡各种因素。

    高广超

扫码关注云+社区

领取腾讯云代金券