05说一下深浅拷贝基础(数据类型)。
【解析】1.基础数据类型(值传递)//基本数据类型的拷贝(复制copy)深拷贝和浅拷贝//前提:需要理解值传递地址传递基本数据类型值传递numberstringbooleannullundefinedSysmbolbigInt//Numbera=1.1;b=a;b=2;console.log(a,b)//Stringa='hello';b=a;b=3;console.log(a,b)//Booleana=false;b=a;b='sss';console.log(a,b)//Undefineda=undefined;b=a;b=false;console.log(a,b)//Nulla=null;b=a;b=undefined;console.log(a,b)2.复杂数据类型(地址传递)//复杂数据类型(object)的拷贝地址传递注意常用的复杂数据类型包括:{}、[]、function(){}、Date、RegExp、null(这个比较特殊)等//1、我们依然用一的简单赋值(=)来进行一遍操作(赋值)//经过实践我们会发现://1、当类型为{}、[]的时候,改变b的值,a也会跟着一起变化。//2、当类型为Date、function、RegExp的时候,a保持不变。//总结://我们发现{}或者[]时,简单的赋值操作并不能实现它们的拷贝,只是改了b的指向,使a和b都指向同一个引用,随意改变一个,都会影响另外一个的值。{}a={name:'abc'};b=a;b.name='sss';console.log(a,b)//[]a=['a','b','c'];b=a;b[1]='d';console.log(a,b)//functiona=function(){alert('aaa');};b=a;b=function(){alert('bbb');};console.log(a.toString(),b.toString())//Datea=newDate('2018-10-1100:00:00');b=a;b=newDate('1970-01-0100:00:00');console.log(a,b)//RegExpa=newRegExp('abc');b=a;b=newRegExp('aaa');console.log(a,b)
来自:JavaScript语言-语法相关