深刻了解 Number 類型

Number 類型做爲 JS 的基本數據類型之一,被應用在程序中的各類場景,其重要性就如數字對於咱們平常生活。
下面就讓咱們來一塊兒深刻了解下,爲之後的「策馬奔騰」作好鋪墊。html

定義方式

通常來講咱們能夠直接使用數值字面量格式來定義一個數字,以下:dom

var num1 = 15;
var num2 = 7;

console.log(typeof num1); // number
console.log(typeof num2); // number

數值類型

定義的數值可分爲兩種類型,分別爲整數和浮點數。函數

整數

整數,能夠經過十進制,八進制,十六進制的字面值來表示。(默認爲十進值)code

// 十進制
var intNum1 = 55; // 正數
var intNum2 = 0; // 0
var intNum3 = -3; // 負數

// 八進制
// 第一位必須是0,其他位的取值範圍爲0-7
// 無效的八進制會直接忽略前面的0,解析爲十進制
var octalNum1 = 070; // 八進制的56(7*8 + 0)
var octalNum2 = 079; // 無效的八進制數,9超過了8進制數的範圍,解析爲79
var octalNum3 = 08; // 無效的八進制數,直接解析僞8

// 十六進制
// 前兩位必須是0x,其他位的取值範圍爲 0~9 或 A~F
var hexNum1 = 0xA; // 十六進制的10
var hexNum2 = 0x1f; // 十六進制的31(1*16 + 15)
在進行算數計算時,全部以八進制和十六進制表示的數值最終都將被轉換成十進制的數值。
// 對前面定義的八進制和十六進制數值進行運算
console.log(octalNum1 + hexNum1); // 66
浮點數

浮點數其實就是咱們一般所說的小數,因此必定有個小數點。簡單示例以下:htm

var floatNum1 = 5.2;
var floatNum2 = 3.14;

浮點數所佔據的內存空間是整數的兩倍。若是小數點後只有零或沒有數字,爲了節省內存空間,則該小數會被轉化爲整數,以下:對象

var floatNum3 = 5.0; // 5
var floatNum4 = 2.; // 2

進行算術運算時,浮點數不如整數精準,因此通常不要使用浮點數進行計算,以下:ip

var floatNum4 = 0.1; 
var floatNum5 = 0.2; 

// 0.1 + 0.2 不等於 0.3
console.log(floatNum4 + floatNum5); // 0.30000000000000004

對極大極小的浮點數通常會採用e表示法,以下:內存

var floatNum6 = 3.2e7;// 3.2×10(7次冪)
 var floatNum7 = 3.2e-7;// 3.2×10(-7次冪)

NaN

NaN 是 not a number 的簡寫,即非數字。它是一個特殊的值,這個數值用於表示一個原本要返回數值的操做數,結果未返回數值的狀況。
NaN 有兩個不一樣尋常的特色:字符串

  • 任何涉及 NaN 的操做都會返回 NaN
  • NaN 值與任何值都不相等,包括自己。

console.log(NaN / 10); // NaN
console.log(NaN == NaN); // false
針對這兩個特色,JS 提供了一個 isNaN()函數。該函數接受一個參數(能夠是任何類型),而函數會幫咱們肯定這個參數是否「不是數值」。
注:傳遞的參數會涉及數值轉換的問題,例如「10」這個字符串就能夠轉換爲 10,可是「blue」這個字符串則沒法轉換爲數字,因此 isNaN('blue') == trueget

console.log(isNaN(NaN)); // true
console.log(isNaN(10)); // false
console.log(isNaN("10")); // false,能夠被轉成數值 10
console.log(isNaN("blue")); // true
console.log(isNaN(true)); // false,能夠被轉成數值 1

數值轉換

有三個函數能夠把非數值轉換爲數值:Number(),parseInt(),parseFloat()。第一個能夠用於任何數據類型,後兩個則專門用於把字符串轉化爲數值。
簡單示例以下:

// Number()
// 轉換規則比較複雜,可詳細參考下面的資料
var numN1 = Number("Hello world!");  // NaN
var numN2 = Number(" ");  // 0 空字符串轉爲0
var numN3 = Numberl("000011");  // 11
var numN4 = Number(true);  // 1

// parseInt
// 忽略小數點
// 字符串會被轉成數值
var numI1 = parseInt(22.5);   // 22
var numI2 = parseInt ("1234blue") ;  // 1234
var numI3 = parseInt (" ") ;   // NaN
var numI4 = parseInt("70");  //70(十進制數)
var numI5 = parseInt ("070") ;  // 56(八進制數)
var numI6 = parseInt ("0xA") ;  // 10(十六進制數)

// parseFloat
// 字符串會被轉成數值
// 若是有多個小數點,則只去第一個,其他所有捨棄
var numF1 = parseFloat ("1234blue") ;  // 1234(整數)
var numF2 = parseFloat("0xA");   // 0
var numF3 = parseFloat("22.5");  // 22.5
var numF4 = parseFloat("22.34.5");  // 22.34
var numF5 = parseFloat("0908.5");   // 908.5
var numF6 = parseFloat("3.125e7");   // 31250000

詳細介紹可參考:

數值範圍

因爲內存的限制,JS 並不能保存全部的數值。那麼其能表示的最大最小值究竟是多少呢?咱們可使用 Number 對象的 MIN_VALUE 和 MAX_VALUE 屬性表示(不多不多用到,大概知道就能夠,真要用的時候能夠再查閱):

  • Number.MIN_VALUE 爲能表示的最小正數即最接近 0 的正數 (實際上不會變成 0),它的近似值爲 5 x 10-324。
  • Number.MAX_VALUE 爲能表示的最大正數,它的近似值爲 1.7976931348623157 x 10308

若是一個數值超過了最大能表示數值,則自動變成 Infinity 值(無窮數),咱們可使用 Number 對象的 isFinite() 來判斷一個數是不是有限數,若是非有限數則爲無窮數。

console.log(Number.isFinite(56)); // true
console.log(Number.isFinite(Number.MAX_VALUE + Number.MAX_VALUE)); // false

更多 Number 對象的屬性和方法可參考:Number 對象 | MDN

數學函數

回憶想一想,咱們上學的時候是否是學過不少處理數字的數學公式啊,那在 JS 中該怎麼辦?
不用慌,JS 中內置了一個 Math 對象,它具備數學常數和函數的屬性和方法。
咱們先來幾個簡單的例子:

// 函數返回一個數字四捨五入後最接近的整數值。
Math.round(3.4); // 3

// 函數返回一個隨機浮點數, 範圍在[0,1)
Math.random(); // 隨機浮點數,每次都不同

// 函數返回一個數的平方根
Math.sqrt(9); // 3

// 函數返回給定的一組數字中的最大值
Math.max(10, 20, 13, 18);   //  20

//sin 方法返回一個 -1 到 1 之間的數值,表示給定角度(單位:弧度)的正弦值。
// Math.PI 表示圓周率,一個圓的周長和直徑之比,約等於 3.14159.
Math.sin(Math.PI / 2); // 1

更多 Math 對象可參考:Math 對象 | MDN

相關文章
相關標籤/搜索