基本类型
场景:赋值语句中的区别
赋值语句:只传值
var a = 10;
var b = a;
console.log(b);//10
b = 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)