值类型和引用类型

131 阅读1分钟

值类型和引用类型

js中变量类型分为两种一种是值类型一种是引用类型

值类型有:string(字符串),number(数值),null,undefined,boolean(布尔值)

引用类型有:array(数组),object(对象),functhion(函数)

值类型和引用类型的区别

1. 存储位置不一样

值类型占用固定空间,保存在栈中,保存和赋值的都是值的本身,可以使用typeof检测值的类型

引用类型占用空间不固定,保存空间不固定,保存和赋值的是指向对象的一个指针,使用instanceof检测数据类型,是用new方法添加方法和构造出来的对象是引用类型

2. 复制方式不一样

值类型的复制就是深复制,如 var a = 10; var b = a;那么a的值就复制给b了,b修改值不会影响a,两份数据在内存中是完全独立的

值类型的复制实际上是传递引用,只是浅复制,将变量中的存储地址赋值一份单独存储,但是两个变量中修改一个,另一个访问的时候,也会访问到被修改的值的地址

3. 值类型无法添加属性和方法,引用类型可以添加属性和方法

4. 值类型的比较是值的比较,而引用类型的比较是引用地址的比较

5. 在函数中使用,值类型在函数中被修改时只在函数作用域中生效,当函数被销毁立即失效,而值类型在函数中被修改时修改的是运行时的数据,函数被销毁,变量依旧被修改