數字值是由一連串數字字元組成,例如:
5
數字資料類型也包含一些代表數字概念的特殊全域屬性,例如 Infinity
和 NaN
(一個值代表「不是數字」),這可能是嘗試對非數值值進行數學計算的結果。
數字物件
將值傳遞至 Number()
函式時,該值會轉換為相等的數字。例如,數字字串會產生相等的數字基元:
Number( "10" );
> 10
將 false
或 null
值傳遞至 Number()
會傳回 0
,true
會傳回 1
。
Number( null );
> 0
Number( false );
> 0
Number( true );
> 1`
如果無法轉換值 (例如 undefined
或包含非數字字元的字串),Number
函式會傳回 NaN
:
Number( undefined );
> NaN
Number( "The number 3." );
> NaN
如原型繼承所述,您幾乎沒有理由使用 Number
物件做為建構函式,因為此物件會建立 Number
物件,而非數字常值。
let numObject = new Number( 15 );
numObject;
> Number { 15 }
這個物件的行為就像為數學運算的指派值,但會無法與數字常值進行嚴格的等式比較,因為資料類型兩者並不相符,而且並未針對常值提供任何實際好處。
let tenObject = new Number( 10 );
tenObject + 5;
> 15
tenObject === 10;
> false
浮點數和整數
JavaScript 只有一個數字類型:介於 -2^1024
和 2^1024
之間的 64 位元 IEEE 754-1985 雙精度浮點數。在 JavaScript 中儲存任何數字之前,JavaScript 會先將該數字轉換為二進位浮點數 (也稱為「浮點數」float)。
這個 64 位元儲存空間 (一個正數或負「符號」位元、為指數為 11 位元、分數為 52 位元) 會導致任何位數超出允許範圍內的精確度錯誤。這項限制取決於 JavaScript 數字資料類型。
0.1 + 0.7
> 0.7999999999999999
您可以將數字值儲存為「整數」,這個浮點數不用介於 -(2^53 − 1)
和 2^53 − 1
之間。由於浮點數和整數是以相同的基本方式儲存,因此這些數字的運作方式沒有實質差異。但建議您盡可能使用整數,以免發生精確度錯誤。
數字運算子
當您搭配數字基元使用標準數學運算子時,系統會套用數學運算順序:系統會先評估任何用括號括住的運算式,後面接著指數、乘法、除法、加法和減法。
運算子 | 名稱 | 說明 | 用量 | 結果 |
---|---|---|---|---|
+ |
附加 | 2+2 |
4 |
|
- |
減法 | 4-2 |
2 |
|
* |
乘 | 2*5 |
10 |
|
/ |
部門 | 10/5 |
2 |
|
++ |
遞增 | 將數字加到數字中 | 2++ |
3 |
-- |
減少 | 將數字從數字中減去 | 3-- |
2 |
** |
指數 | 傳回將第一個 運算元提高為第二個運算元次方的結果。 |
2**4 |
16 |
% |
其餘 | 當 第一個運算元除以第二個運算元時,會傳回剩餘的餘數。 |
12%5 |
2 |
您也可以使用數學指派運算子,對變數值執行數學運算,然後立即將該新計算的值指派給變數。
運算子 | 名稱 | 用量 |
---|---|---|
+= |
新增指派作業 | myValue += 2 |
-= |
減量指派 | myValue -= 2 |
*= |
乘法指派 | myValue *= 2 |
/= |
部門分配 | myValue /= 2 |
**= |
指數指派 | myValue **= 2 |
%= |
其餘指派 | myValue %= 2 |
符號值
數字基元也適用於幾個特殊情況:「非數字」值 (NaN
),而值代表無限 (Infinity
) 或負 (-Infinity
) 的無限值。
您可能會因為除以零的結果而很少遇到 Infinity
,這種情況下,大多數程式設計語言都會擲回錯誤:
10 / 0
> Infinity
請記住,JavaScript 區分大小寫。Infinity
是代表無限大概念的數字資料類型,但 infinity
沒有特殊意義:
Infinity
> Infinity
infinity
> Uncaught ReferenceError: infinity is not defined
NaN
(也就是「不是數字」) 會更頻繁地顯示,在算術運算結果無法以數字表示的情況下。舉例來說,由於 JavaScript 會嘗試從值和結構定義推論資料類型,因此只有數字的字串常值才能用於數學運算:
"2" * 2;
> 4
但是,如果無法將該字串剖析為數值,則數學運算會產生非數字:
"two" * 2;
> NaN
當數學運算中的無效值以數字表示時,系統就會傳回 NaN
。相關示例包括:
- 失敗的轉換次數 (例如:
parseInt( undefined )
) - 結果不是實數的算術運算 (例如
0 / 0
、Math.sqrt( -10 )
) - 帶有不確定結果的算術運算 (
0 * Infinity
) - 包含明確
NaN
(NaN + 2
) 或NaN
結果 (2 * "string" / 2
) 的算術運算
隨堂測驗
將 false
傳遞至 Number()
會有什麼結果?
下列數學運算的結果是什麼?
"Six" * 3