Js中数据类型和堆栈

JavaScript中值类型分为两种:

不可改变的原始值(栈数据) Number,String,Boolean,undefined,null
引用值(堆数据) array,object,function首先,讨论两个问题:
var num1 = 100;
var num2 = num1;
num2 = 200;
问题:这个时候num1 = ?

var arr1 = [1,2];
var arr2 = arr1;
arr1.push(3);
问题:这个时候arr2 = ?
答案分别为:100;[1,2,3]
这个问题,我们首先需要了解数据在栈堆中怎么储存。
第一个问题:Js中数据类型和堆栈num1 = 100 ,就是定义了一个房间号为 num1,把100放入房间中,然后num2 = num1,就是把num1的值copy了一份放在num2中,num2为100,这个时候,num2 = 200,根本上是重新定义了一个num2 = 200,(我们前面也说过 这是不可改变的原始值),所以num1还是为100;
再说第二个问题:
Js中数据类型和堆栈
首先定义了一个arr1,这时我们首先在栈上定义这个名字,然后发现这是一个复杂数据类型,然后把数据储存在堆中,栈中的内容是 指向堆中 (如图),然后复制了一份内容放在arr2中,这个时候用push方法就是改变堆中的数据[1,2,3],所以说,arr2也改变了。