Numbers

數字值是由一連串數字字元組成,例如:

5

數字資料類型也包含一些特殊的全域屬性, 代表數字概念,例如 InfinityNaN,這是一個數值的意義。 「不是數字」嘗試算出數學結果的可能結果 非數字值的計算。

數字物件

值傳遞至 Number() 函式時,該值會轉換為 與實際數字相等的數值舉例來說,數字字串會產生對應的 原始數字:

Number( "10" );
> 10

falsenull 值傳遞至 Number() 會傳回 0true 會傳回 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 只有一種數字類型:64 位元 IEEE 754-1985 雙精度浮點數 浮點數 -2^10242^1024。JavaScript 在記憶體中儲存任何數字之前,會先 將該數字轉換為二進位浮點數 (也稱為「浮點數」)。

這個 64 位元儲存空間 (一個正或負「符號」,11 位元代表 指數、分數為 52 位元) 會導致任何數字發生精確度錯誤 不符合允許的範圍內的數字。這項限制原本就存在 轉換為 JavaScript 數字資料類型

0.1 + 0.7
> 0.7999999999999999

數字值可以改為儲存為「整數」,也就是浮點數 而 -(2^53 − 1)2^53 − 1 之間沒有小數。由於浮點數和 整數的儲存方式與一般情況相同,但沒有實質差異 呈現這些數字的運作原理不過,我們建議在隨時使用整數 以避免精確度錯誤

數字運算子

使用標準數學運算子搭配數字基元時, 數學運算順序 apply:系統會先評估以括號括住的任何運算式,後面接著 指數、乘法、除法、加和減法。

運算子 名稱 說明 用量 結果
+ 附加 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 / 0Math.sqrt( -10 ))
  • 帶有不確定結果的算術運算 (0 * Infinity)
  • 包含明確 NaN (NaN + 2) 或 NaN 筆結果 (2 * "string" / 2)

隨堂測驗

false 傳遞至 Number() 會有什麼結果?

NaN
0
1

下列數學運算的結果是什麼?

"Six" * 3

18
0
NaN
2