JavaScript 數字

JavaScript 數字

  • JS 字符串方法
  • JS 數字方法

JavaScript 數字

JavaScript 只有一種數值類型。

書寫數值時帶不帶小數點均可。

JavaScript 數值

書寫 JavaScript 數值既可以帶小數點,也可以不帶:

實例

<code>var x = 3.14;    // 帶小數點的數值
var y = 3; // 不帶小數點的數值
/<code>

親自試一試

超大或超小的數可通過科學計數法來寫:

實例

<code>var x = 123e5;    // 12300000
var y = 123e-5; // 0.00123
/<code>

JavaScript 數值始終是 64 位的浮點數

與許多其他編程語言不同,JavaScript 不會定義不同類型的數,比如整數、短的、長的、浮點的等等。

JavaScript 數值始終以雙精度浮點數來存儲,根據國際 IEEE 754 標準。

此格式用 64 位存儲數值,其中 0 到 51 存儲數字(片段),52 到 62 存儲指數,63 位存儲符號:

值(aka Fraction/Mantissa)指數符號52 bits(0 - 51)11 bits (52 - 62)1 bit (63)

精度

整數(不使用指數或科學計數法)會被精確到 15 位。

實例

<code>var x = 999999999999999;   // x 將是 999999999999999
var y = 9999999999999999; // y 將是 10000000000000000
/<code>

小數的最大數是 17 位,但是浮點的算數並不總是 100% 精準:

實例

<code>var x = 0.2 + 0.1;         // x 將是 0.30000000000000004/<code>

使用乘除法有助於解決上面的問題:

實例

<code>var x = (0.2 * 10 + 0.1 * 10) / 10;       // x 將是 0.3/<code>

親自試一試

數字和字符串相加

警告!!

JavaScript 的加法和級聯(concatenation)都使用 + 運算符。

數字用加法。字符串用級聯。

如果您對兩個數相加,結果將是一個數:

實例

<code>var x = 10;
var y = 20;
var z = x + y; // z 將是 30(一個數)
/<code>

如果對兩個字符串相加,結果將是一個字符串的級聯:

實例

<code>var x = "10";
var y = "20";
var z = x + y; // z 將是 1020(字符串)
/<code>

如果您對一個數和一個字符串相加,結果也是字符串級聯:

實例

<code>var x = 10;
var y = "20";
var z = x + y; // z 將是 1020(一個字符串)
/<code>

如果您對一個字符串和一個數字相加,結果也是字符串級聯:

實例

<code>var x = "10";
var y = 20;
var z = x + y; // z 將是 1020(字符串)
/<code>

常見的錯誤是認為結果應該是 30:

實例

<code>var x = 10;
var y = 20;
var z = "The result is: " + x + y;
/<code>

親自試一試

常見的錯誤是認為結果應該是 102030:

實例

<code>var x = 10;
var y = 20;
var z = "30";
var result = x + y + z;
/<code>

JavaScript 從左向右進行編譯。

因為 x 和 y 都是數,10 + 20 將被相加。

因為 z 是字符串,30 + "30" 被級聯。

數字字符串

JavaScript 字符串可以擁有數字內容:

<code>var x = 100;         // x 是數字

var y = "100"; // y 是字符串
/<code>

在所有數字運算中,JavaScript 會嘗試將字符串轉換為數字:

該例如此運行:

<code>var x = "100";
var y = "10";
var z = x / y; // z 將是 10
/<code>

該例也將如此運行:

<code>var x = "100";
var y = "10";
var z = x * y; // z 將是 1000
/<code>

該例如此運行:

<code>var x = "100";
var y = "10";
var z = x - y; // z 將是 90
/<code>

但是該例不會如上例般運行:

<code>var x = "100";
var y = "10";
var z = x + y; // z 不會是 110(而是 10010)
/<code>

在最後一個例子中,JavaScript 用 + 運算符對字符串進行了級聯。

NaN - 非數值

NaN 屬於 JavaScript 保留詞,指示某個數不是合法數。

嘗試用一個非數字字符串進行除法會得到 NaN(Not a Number):

實例

<code>var x = 100 / "Apple";  // x 將是 NaN(Not a Number)/<code>

不過,假如字符串包含數值,則結果將是數:

實例

<code>var x = 100 / "10";     // x 將是 10/<code>

您可使用全局 JavaScript 函數 isNaN() 來確定某個值是否是數:

實例

<code>var x = 100 / "Apple";
isNaN(x); // 返回 true,因為 x 不是數
/<code>

要小心 NaN。假如您在數學運算中使用了 NaN,則結果也將是 NaN:

實例

<code>var x = NaN;
var y = 5;
var z = x + y; // z 將是 NaN
/<code>

結果也許是串連接:

實例

<code>var x = NaN;
var y = "5";
var z = x + y; // z 將是 NaN5
/<code>

NaN 是數,typeof NaN 返回 number:

實例

<code>typeof NaN;             // 返回 "number"/<code>

親自試一試

Infinity

Infinity (或 -Infinity)是 JavaScript 在計算數時超出最大可能數範圍時返回的值。

實例

<code>var myNumber = 2;

while (myNumber != Infinity) { // 執行直到 Infinity
myNumber = myNumber * myNumber;
}
/<code>

除以 0(零)也會生成 Infinity:

實例

<code>var x =  2 / 0;          // x 將是 Infinity
var y = -2 / 0; // y 將是 -Infinity
/<code>

親自試一試

Infinity 是數:typeOf Infinity 返回 number。

實例

<code>typeof Infinity;        // 返回 "number"/<code>

十六進制

JavaScript 會把前綴為 0x 的數值常量解釋為十六進制。

實例

<code>var x = 0xFF;             // x 將是 255/<code>

絕不要用前導零寫數字(比如 07)。

一些 JavaScript 版本會把帶有前導零的數解釋為八進制。

默認地,Javascript 把數顯示為十進制小數。

但是您能夠使用 toString() 方法把數輸出為十六進制、八進制或二進制。

實例

<code>var myNumber = 128; 

myNumber.toString(16); // 返回 80
myNumber.toString(8); // 返回 200
myNumber.toString(2); // 返回 10000000
/<code>

數值可以是對象

通常 JavaScript 數值是通過字面量創建的原始值:var x = 123

但是也可以通過關鍵詞 new 定義為對象:var y = new Number(123)

實例

<code>var x = 123;
var y = new Number(123);

// typeof x 返回 number
// typeof y 返回 object
/<code>

請不要創建數值對象。這樣會拖慢執行速度。

new 關鍵詞使代碼複雜化,併產生某些無法預料的結果:

當使用 == 相等運算符時,相等的數看上去相等:

實例

<code>var x = 500;             
var y = new Number(500);

// (x == y) 為 true,因為 x 和 y 有相等的值
/<code>

親自試一試 當使用 === 相等運算符後,相等的數變為不相等,因為 === 運算符需要類型和值同時相等。

實例

<code>var x = 500;             
var y = new Number(500);

// (x === y) 為 false,因為 x 和 y 的類型不同
/<code>

甚至更糟。對象無法進行對比:

實例

<code>var x = new Number(500);             
var y = new Number(500);

// (x == y) 為 false,因為對象無法比較
/<code>

JavaScript 對象無法進行比較。


分享到:


相關文章: