在 ECMAScript 中,变量能够存在两种类型的值,即原始值和引用值。函数
原始值 | 引用值 | |
概念 | 原始值指的是 原始类型 的值,也叫 基本类型 | 引用值指的是 引用类型(类) 的值 |
数据类型 | Number、Stirng、Boolean、Null、Underfined | Object、Function、Array、Date、RegExp |
存储 | 栈(stack),占内存空间固定,使用后被销毁 | 堆(heap),占内存空间不固定,使用后不必定被销毁,只有一个对象没有任何引用时,spa 系统的垃圾回收机制才会回收销毁指针 |
赋值方式 |
1.
值的拷贝,建立一个新对象
2.保存与复制的是值自己
3.两份数据在内存中是彻底独立的
|
1.
引用的拷贝,建立一个新引用
2.保存与复制的是指向对象的一个指针
3.变量中的存储的地址赋值一份单独存储,
两个变量中修改其中一个对象,另一个引用来访问的时候,也会访问到修改后的值。
4.使用 new() 方法构造出的对象是引用型
|
值是否可变 | 不可变 | 可变 |
做用域 | 函数做用域,在函数内部修改时生效,函数销毁时失效 | 函数中被修改时修改的是运行时数据区中的值,即便函数被销毁,变量的值依旧被改变。 |
比较方式 | 值 的比较code |
引用的比较 |
== → 只比较值
=== → 不只比较值,还比较数据类型
|
||
检测类型 | typeof 运算符 | instanceof 运算符 |
存储详解
原始值:对象
var a =100; var b = a; a = 200; console.log(b);//100
复制前的变量对象blog
复制后的变量对象ip
引用值:内存
var a = {age:20}; var b = a; b.age = 21; console.log(a.age);//21