在 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