美文网首页
javaScript变量在内存中的存储问题

javaScript变量在内存中的存储问题

作者: 岛在深海处 | 来源:发表于2018-10-27 18:00 被阅读0次

最近在写javaScript代码时,有个问题一直困恼着我

var arr1 = [{name: '小明'},{name: '李雷'}, {name: '陈多'}];
//var arr2 = arr1.map((person) => person)
var arr2 = [...arr1]
arr2[0].name = '大明'
console.log(arr1) //1、[ { name: '大明' }, { name: '李雷' }, { name: '陈多' } ]
arr2[1] = {age: 23}
console.log(arr1) //2、[ { name: '大明' }, { name: '李雷' }, { name: '陈多' } ]
console.log(arr2) //3、[ { name: '大明' }, { age: 23 }, { name: '陈多' } ]

arr2不是通过'...'或者map函数重新生成的一个数组对象吗?为什么改变新数组中的对象的属性,原始数组中的对象的属性也会改变呢?

通过画堆栈图,我发现原因只有一个:我们在对数组使用'...'或者map、filter来生成新数组时,虽然js在内存中新建了一个数组,但是数组中的元素的地址指向并没有变化。

下面是堆栈图,有助于理解:

生成新数组对象模式.png

另一种情况是不生成新数组,直接赋值的方式,堆栈图如下:

直接赋值-两个变量指向同一个数组对象.png

关于javaScript值传递还是引用传递的问题可以看这篇文章:
JavaScript值传递 or 引用传递?

相关文章

  • javaScript变量在内存中的存储问题

    最近在写javaScript代码时,有个问题一直困恼着我 arr2不是通过'...'或者map函数重新生成的一个数...

  • 笔记:数组的内存分配 , 排序算法,数组和函数之间的关系

    #mark- 01-数组内存存储细节 //问题:变量和数组在内存中存储的区别? 注意作图分析内存 1.变量在内存中...

  • 小白从JavaScript变身的过程3

    Javascript变量和常量 1.变量: 内存中的一段存储空间 2. 变量的声明: 1)、声明 var ...

  • string()和new string()的区别

    javascript中的变量在内存中的存储有两种形式,值类型存储和引用类型存储,值类型存储是直接在地址中存值的,而...

  • 变量

    JavaScript 变量JavaScript 变量是存储数据值的容器。 在本例中,x、y 和 z 是变量: 实例...

  • 数组的介绍及使用

    JavaScript 中的数组常用于在单个变量中存储多个值。数组就是一组数据的集合,在内存中表现为一段连续的内存地...

  • 数组的介绍及使用

    JavaScript 中的数组常用于在单个变量中存储多个值。数组就是一组数据的集合,在内存中表现为一段连续的内存地...

  • js堆内存、栈内存以及数据类型

    在javascript中,我们每定义一个变量,系统会自动为其分配内存来存储该变量,由于变量值有不同的数据类型,JS...

  • Python中的变量和简单数据类型

    变量: 变量是存储在内存中的值,在创建变量时会在内存中开辟一个空间。变量可以指定不同的数据类型,这些变量可以存储整...

  • Day02Python变量

    1、什么是变量 声明变量,就是在内存中开辟在空间存储数据。就是程序在内存中存储数据的容器 2、怎么声明变量 C/J...

网友评论

      本文标题:javaScript变量在内存中的存储问题

      本文链接:https://www.haomeiwen.com/subject/iovdtqtx.html