基本类型
场景:赋值语句中的区别
赋值语句:只传值
var a = 10;var b = a;console.log(b);//10b = 20;console.log(a)//10
引用类型
基本类型只传值,引用类型既传值也传址
引用:既传值也传址
地址,引用,指针
var obj ={name:"lisi"};var str = obj;console.log(str); //{name: "lisi"}str.age = 18;console.log(obj); //{name: "lisi", age: 18}
js中有栈和堆的概念, 变量存在栈中,生成的实际对象存堆内存中,栈内存中的变量存的是一个引用(指针,地址的值),指向堆内存中的实际对象,发生了赋值运算 实际上将地址的值赋予了sum,那么这个指针也是指向堆内存中的同一个对象
深拷贝和浅拷贝
浅拷贝只是增加了一个指针指向已存在的内存地址
深拷贝增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存
数组深拷贝的方法
var arr = [1,2,3];var sum = [...arr];console.log(sum)arr.push(4);console.log(sum)
var arr = [1,2,3];var sum = [].concat(arr);console.log(sum)arr.push(4);console.log(sum)
var arr = [1,2,3];var sum = arr.slice(0);console.log(sum)arr.push(4);console.log(sum)
