在js中,存在两种类型的值:原始值(值类型或基本类型) 和 引用值(引用类型)
// 随机生成n到m的随机数
function random(n,m){
return Math.floor(Math.random() * (m - n + 1) + n);
}
调用时,输入实参取代n,m
原始值 |
引用值 |
|
概念 | 原始值指的是 原始类型 的值,也叫 基本类型 | 引用值指的是 引用类型(类) 的值 |
数据类型 | Number、Stirng、Boolean、Null、Underfined、 Symbol(es6新增) | Object、Function、Array、Date、RegExp |
存储 | 栈(stack),占内存空间固定,使用后被销毁 | 堆(heap),占内存空间不固定,使用后不一定被销毁,只有一个对象没有任何引用时,系统的垃圾回收机制才会回收销毁 |
赋值方式 | 1.值的拷贝,创建一个新对象 2.保存与复制的是值本身 3.两份数据在内存中是完全独立的 |
1.引用的拷贝,创建一个新引用 2.保存与复制的是指向对象的一个指针 3.变量中的存储的地址赋值一份单独存储, 两个变量中修改其中一个对象,另外一个引用来访问的时候,也会访问到修改后的值。 4.使用 new() 方法构造出的对象是引用型 |
值是否可变 | 不可变 | 可变 |
作用域 | 函数作用域,在函数内部修改时生效,函数销毁时失效 | 函数中被修改时修改的是运行时数据区中的值,即使函数被销毁,变量的值依旧被改变。 |
比较 方式 | 值的比较 |
引用的比较 |
== 只比较值 === 不仅比较值,还比较数据类型 |
||
检测类型 | typeof 运算符 | instanceof 运算符 |