美文网首页
借助堆栈理解JS中的数组赋值问题

借助堆栈理解JS中的数组赋值问题

作者: 哪树繁花 | 来源:发表于2017-09-12 20:59 被阅读29次

首先先看问题

var a = 3;
var b = a;
b = 10;
alert(a+","+b);

答案很明显:3,10 。

var arr = [1,2,3];
var brr = arr;
brr[0] = 5;
alert(arr);
alert(brr);

两次的结果都是5,2,3 。
出现这种情况的原因是:在定义变量的时候,栈内存里只能存放简单数据类型,比如数字,字符之类,所以定义a = 3的时候在栈里开辟出一块空间存放a,定义b=a的时候开辟另一块空间存放b,他俩的值是一样的;但当定义的变量是数组时,由于数组里元素数不固定,整个数组属于复杂数据类型,而复杂数据类型只能放到堆内存里,我们定义的数组arr在栈内存储存的是一个十六进制得地址,这个地址是指向存放数组内容的堆内存的,这时再去定义数组brr = arr时,是把栈里的地址值赋值给了brr,arr和brr是指向同一块堆内存的,所以对arr和brr中的任何一个操作,都会影响另一个。


相关文章

  • 借助堆栈理解JS中的数组赋值问题

    首先先看问题 答案很明显:3,10 。 两次的结果都是5,2,3 。出现这种情况的原因是:在定义变量的时候,栈内存...

  • 变量的解构赋值

    本文通过学习阮一峰的博客,外加自己的理解,整理了一下我对js变量的解构赋值的理解。 数组的解构赋值 对象的解构赋值...

  • ECMA对象之Array对象

    js中没有存有想java中的集合之类的所以js存储数据就是用数组 数组的长度不固定,类型不固定,未赋值的元素默认为...

  • js中的解构赋值:可以同时对一组变量进行赋值

    js中的解构赋值:可以同时对一组变量进行赋值 // 先看下传统的赋值:把一个数组的...

  • JS数组与对象赋值问题

    最近有群友遇到一个问题 就是给数组赋值遇到的一些问题 正好自己也不了解 就去网上查了一些资料 在这里做一下总结 问...

  • vue中的数组赋值问题

    vue中的数组赋值 上面的方式一方式二赋值是将会 报错 vue中数组赋值是个坑,无法更新页面需要遍历后赋值给当前...

  • 数组

    原文JS中的数组提供了四个操作,以便让我们实现队列与堆栈!小理论:队列:先进先出堆栈:后进先出实现队列的方法:sh...

  • ES6学习-变量的解构赋值

    何为解构,即结构分解。 1.数组的解构赋值 在js中,我们会经常给变量赋值,需要一个一个赋值。如 es5赋值 对比...

  • 3-15 算法类

    排序 队列 链表堆栈 是一定要准备的,JS的数组本身就具备堆栈和队列的特性.pop push shift unsh...

  • JS学习笔记

    数组Js数组里面可以是任意类型 我们可以给js数组长度赋值改变数组大小 数组的slice方法类似于字符串的subs...

网友评论

      本文标题:借助堆栈理解JS中的数组赋值问题

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