首頁 >後端開發 >php教程 >ECMAScript 原始值和引用值 - JavaScript ING

ECMAScript 原始值和引用值 - JavaScript ING

不言
不言原創
2018-03-30 12:44:351900瀏覽

本篇文章主要和大家分享了一些ECMAScript 原始值和引用值的知識,有需要的朋友們可以參考一下

一、原始值和引用值的概念

在ECMAScript 中,變數可以存在兩種類型的值,即原始值引用值

1.1 原始值

(1)原始值指的是原始型別 的值,也叫基本型別,例如Number、Stirng、 Boolean、Null、Underfined 。

(2)儲存在堆疊(stack)中的簡單資料段,也就是說,它們的值直接儲存在變數存取的位置

(3)注意

在許多語言中,字串都被看作引用類型,而非原始類型,因為字串的長度是可變的。 ECMAScript 打破了這項傳統。

1.2 引用值

(1)引用值指的是 引用型別 的值,例如 Object、Function、Array、Date、RegExp 。

(2)儲存在堆(heap)中的對象,也就是說,儲存在變數處的值是一個指針(point),指向存儲物件的記憶體處

二、堆疊與堆疊

2.1 原始值儲存在堆疊中

為變數賦值時,ECMAScript 的解釋程式必須判斷該值是原始類型,還是參考類型。要實現這一點,解釋程式則需嘗試判斷該值是否為 ECMAScript 的原始類型之一,即 Undefined、Null、Boolean、Number 和 String 型。由於這些原始型別佔據的空間是固定的,所以可將他們儲存在較小的記憶體區域 - 堆疊中。這樣儲存便於迅速查尋變數的值。

2.2 引用值儲存在堆中

如果一個值是引用類型的,那麼它的儲存空間將從堆中分配。由於引用值的大小會改變,所以不能把它放在堆疊中,否則會降低變數查尋的速度。相反,放在變數的堆疊空間中的值是該物件儲存在堆中的位址。位址的大小是固定的,所以把它儲存在堆疊中對變數效能無任何負面影響。

2.3 圖示

ECMAScript 原始值和引用值 - JavaScript ING

#三、原始值和引用值的不同

3.1 賦值方式

3.2 值是否可變

3.3 比較方式不同

四、賦值方式和值是否可變

4.1 原始值是以值的拷貝方式賦值,值是不可變的

4.2 引用值是以引用的拷貝方式賦值,值是可變的

4.3 Example

ECMAScript 原始值和引用值 - JavaScript ING

#4.4 說明

(1)原始值賦值→ 其實是將值拷貝一份並賦值給新的變量,這個值就是副本,他和原始值是互相獨立的,改變其中一個值不會影響到其他的值。

(2)引用值賦值→ 當一個引用類型,例如一個對象,使用= 將其賦值給另一個變量,實際上是其對象的地址引用賦值給新的變量,這兩個變數都指向同一個位址引用,他們有相同的位址。所以若改變其中一個變數(的位址引用指向的物件),另一個變數(的位址引用指向的同一個物件)也會改變。

ECMAScript 原始值和引用值 - JavaScript ING

4.5 擴展

ECMAScript 原始值和引用值 - JavaScript ING

五、比較方式不同

5.1 原始值的比較是 的比較

5.2 引用值的比較是引用 的比較

5.3 Example

ECMAScript 原始值和引用值 - JavaScript ING

5.4 說明

(1)原始值a 和b 的資料型別不同,但也可以進行值的比較。 (在值比較之前,自動進行了資料型別的隱含轉換

  • #==  → 只比較值

  • === → 不僅比較值,還比較資料型別

(2)引用值obj1 和obj2 分別引用的是存放在堆記憶體中的兩個不同的物件,所以obj1 和obj2 的值(位址引用)不一樣。

閱讀更多


一、原始值和引用值的概念

在 ECMAScript 中,變數可以存在兩種類型的值,即原始值引用值

1.1 原始值


(1)原始值指的是原始型別 的值,也叫基本型別,例如Number、Stirng、Boolean、Null、Underfined 。

(2)儲存在堆疊(stack)中的簡單資料段,也就是說,它們的值直接儲存在變數存取的位置

(3)注意

在許多語言中,字串都被看作引用類型,而非原始類型,因為字串的長度是可變的。 ECMAScript 打破了這項傳統。

1.2 引用值

(1)引用值指的是 引用型別 的值,例如 Object、Function、Array、Date、RegExp 。

(2)儲存在堆(heap)中的對象,也就是說,儲存在變數處的值是一個指針(point),指向存儲物件的記憶體處

二、堆疊與堆疊

2.1 原始值儲存在堆疊中

為變數賦值時,ECMAScript 的解釋程式必須判斷該值是原始型別,還是參考型別。要實現這一點,解釋程式則需嘗試判斷該值是否為 ECMAScript 的原始類型之一,即 Undefined、Null、Boolean、Number 和 String 型。由於這些原始型別佔據的空間是固定的,所以可將他們儲存在較小的記憶體區域 - 堆疊中。這樣儲存便於迅速查尋變數的值。

2.2 引用值儲存在堆中

如果一個值是引用類型的,那麼它的儲存空間將從堆中分配。由於引用值的大小會改變,所以不能把它放在堆疊中,否則會降低變數查尋的速度。相反,放在變數的堆疊空間中的值是該物件儲存在堆中的位址。位址的大小是固定的,所以把它儲存在堆疊中對變數效能無任何負面影響。

2.3 圖示

ECMAScript 原始值和引用值 - JavaScript ING

#三、原始值和引用值的不同

3.1 賦值方式

3.2 值是否可變

3.3 比較方式不同

四、賦值方式和值是否可變

4.1 原始值是以值的拷貝方式賦值,值是不可變的

4.2 引用值是以引用的拷貝方式賦值,值是可變的

4.3 Example

ECMAScript 原始值和引用值 - JavaScript ING

#4.4 說明

(1)原始值賦值→ 其實是將值拷貝一份並賦值給新的變量,這個值就是副本,他和原始值是互相獨立的,改變其中一個值不會影響到其他的值。

(2)引用值賦值→ 當一個引用類型,例如一個對象,使用= 將其賦值給另一個變量,實際上是其對象的地址引用賦值給新的變量,這兩個變數都指向同一個位址引用,他們有相同的位址。所以若改變其中一個變數(的位址引用指向的物件),另一個變數(的位址引用指向的同一個物件)也會改變。

ECMAScript 原始值和引用值 - JavaScript ING

4.5 擴展

ECMAScript 原始值和引用值 - JavaScript ING

五、比較方式不同

5.1 原始值的比較是 的比較

5.2 引用值的比較是引用 的比較

5.3 Example

ECMAScript 原始值和引用值 - JavaScript ING

5.4 說明

(1)原始值a 和b 的資料型別不同,但也可以進行值的比較。 (在值比較之前,自動進行了資料型別的隱含轉換

  • #==  → 只比較值

  • === → 不僅比較值,還比較資料型別

(2)引用值obj1 和obj2 分別引用的是存放在堆記憶體中的兩個不同的物件,所以obj1 和obj2 的值(位址引用)不一樣。

相關推薦:

詳解ECMAScript6變數的解構賦值

JavaScript與ECMAScript 的差異

#ECMAScript6入門之Class物件的實例詳解

#


#

以上是ECMAScript 原始值和引用值 - JavaScript ING的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn