js的基础类型和引用类型的区别
js的五大基本类型:boolean、undefined、null、string、number 引用类型:Object、Function、Array
基本类型的数据是存放在栈内存中的,而引用类型的数据是存放在堆内存中的。
基本类型的复制就是在栈内存中开辟出了一个新的存储区域用来存储新的变量,这个变量有它自己的值,只不过和前面的值一样,所以如果其中一个的值改变,则不会影响到另一个。
var num1=5;
var num2=num1;
定义了一个对象其实是在栈内存中存储了一个指针,这个指针指向堆内存中该对象的存储地址。复制给另一个对象的过程其实是把该对象的地址复制给了另一个对象变量,两个指针都指向同一个对象,所以若其中一个修改了,则另一个也会改变。
检测2种变量的函数:
1. Typeof操作符是检测基本类型的最佳工具;
2. 如果变量值是null或者对象,typeof 将返回“object”;
3. Instanceof用于检测引用类型,可以检测到具体的,它是什么类型的实例;
4. 如果变量是给定引用类型的实例,instanceof操作符会返回true;
slice(开始位置,[结束位置]) 返回数组的一部分,返回的是新数组,并不改变原数组,(浅复制)
concat() 不改变原数组,返回一个新数组
深复制和浅复制的区别
深复制和浅复制是针对于array和object这类复杂的对象而言的。浅复制指的是只复制对象的一层属性值,而深复制则递归复制了所有层级