基本类型

场景:赋值语句中的区别
赋值语句:只传值

  1. var a = 10;
  2. var b = a;
  3. console.log(b);//10
  4. b = 20;
  5. console.log(a)//10

引用类型

基本类型只传值,引用类型既传值也传址
引用:既传值也传址
地址,引用,指针

  1. var obj ={name:"lisi"};
  2. var str = obj;
  3. console.log(str); //{name: "lisi"}
  4. str.age = 18;
  5. console.log(obj); //{name: "lisi", age: 18}

js中有栈和堆的概念, 变量存在栈中,生成的实际对象存堆内存中,栈内存中的变量存的是一个引用(指针,地址的值),指向堆内存中的实际对象,发生了赋值运算 实际上将地址的值赋予了sum,那么这个指针也是指向堆内存中的同一个对象

深拷贝和浅拷贝

浅拷贝只是增加了一个指针指向已存在的内存地址
深拷贝增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存

数组深拷贝的方法

  1. var arr = [1,2,3];
  2. var sum = [...arr];
  3. console.log(sum)
  4. arr.push(4);
  5. console.log(sum)
  1. var arr = [1,2,3];
  2. var sum = [].concat(arr);
  3. console.log(sum)
  4. arr.push(4);
  5. console.log(sum)
  1. var arr = [1,2,3];
  2. var sum = arr.slice(0);
  3. console.log(sum)
  4. arr.push(4);
  5. console.log(sum)