一、值类型
在js中,number、string、boolean,都是值类型,值类型的数据直接保存在内存的栈空间
例:第一次输出打印:num1=100,num2=100
第二次输出打印:num1=100,num2=200
解析:值类型数据在传递时,相当于是把num1的值复制传到num2,当num2发生变化是,num1的值并不受影响
二、引用类型
在js中,对象、数组,都是引用类型,引用类型的数据保存在堆中,然后将堆的地址保存到栈中。
例一:第一组输出打印:obj1 {name: '张三', age: 20, sex: '男'} obj2 {name: '张三', age: 20, sex: '男'}
第二组输出打印:obj1 {name: '李四', age: 22, sex: '女'} obj2 {name: '李四', age: 22, sex: '女'}
解析:这里的obj2 = obj1,相当于是把obj1 保存在栈中堆的地址复制传递给了obj2,当obj2产生更改时是直接在同一个堆地址数据块中发生改变,所以这里的obj2 更改,obj1 的内容也会更改
例二:第一组输出打印:obj1 {name: '张三', age: 20, sex: '男'} obj2 {name: '张三', age: 20, sex: '男'}
第二组输出打印:obj1 {name: '张三', age: 20, sex: '男'} obj2 {name: '王五', age: 24, sex: '女'}
解析:以下面的方法给obj2改变值,相当于是在堆中重新定义了一个obj2 的地址,所以obj1 的值不受obj2 的改变而改变