在 ECMAScript 中,變量可以存在兩種類型的值,即原始值和引用值。
原始值 | 引用值 | |
概念 | 原始值指的是 原始類型 的值,也叫 基本類型 | 引用值指的是 引用類型(類) 的值 |
數據類型 | Number、Stirng、Boolean、Null、Underfined | Object、Function、Array、Date、RegExp |
存儲 | 棧(stack),占內存空間固定,使用后被銷毀 | 堆(heap),占內存空間不固定,使用后不一定被銷毀,只有一個對象沒有任何引用時, 系統的垃圾回收機制才會回收銷毀 |
賦值方式 |
1.
值的拷貝,創建一個新對象
2.保存與復制的是值本身
3.兩份數據在內存中是完全獨立的
|
1.
引用的拷貝,創建一個新引用
2.保存與復制的是指向對象的一個指針
3.變量中的存儲的地址賦值一份單獨存儲,
兩個變量中修改其中一個對象,另外一個引用來訪問的時候,也會訪問到修改后的值。
4.使用 new() 方法構造出的對象是引用型
|
值是否可變 | 不可變 | 可變 |
作用域 | 函數作用域,在函數內部修改時生效,函數銷毀時失效 | 函數中被修改時修改的是運行時數據區中的值,即使函數被銷毀,變量的值依舊被改變。 |
比較方式 | 值 的比較 |
引用的比較 |
== → 只比較值
=== → 不僅比較值,還比較數據類型
|
||
檢測類型 | typeof 運算符 | instanceof 運算符 |
存儲詳解
原始值:
var a =100; var b = a; a = 200; console.log(b);//100
復制前的變量對象
復制后的變量對象
引用值:
var a = {age:20}; var b = a; b.age = 21; console.log(a.age);//21