1. 程式人生 > >【重溫基礎】6.數字

【重溫基礎】6.數字

本文是 重溫基礎 系列文章的第六篇。
今日感受:自己需要多總結,會有不同收穫(比如今晚我做的轉正總結)。

系列目錄:

本章節複習的是JS中的數字型別,涉及的API比較多。

前置基礎:
在JavaScript中,數字為雙精度浮點型別(即一個數字範圍只能在-(253-1)和(253-1)之間),整數型別也一樣。
另外數字型別也可以是以下三種符號值:

  • +Infinity : 正無窮;
  • -Infinity : 負無窮;
  • NaN : 非數字(not a number);

1.數字物件

JS中內建了Number物件的一些常量屬性:

屬性 描述
Number.MAX_VALUE 可表示的最大值
Number.MIN_VALUE 可表示的最小值
Number.NaN 特指“非數字”
Number.NEGATIVE_INFINITY
特指“負無窮”;在溢位時返回
Number.POSITIVE_INFINITY 特指“正無窮”;在溢位時返回
Number.EPSILON 表示1和比最接近1且大於1的最小Number之間的差別
Number.MIN_SAFE_INTEGER JavaScript最小安全整數.
Number.MAX_SAFE_INTEGER JavaScript最大安全整數.

注意:以上所有屬性都是不可寫,不可列舉,也不可配置

  • Number.MAX_VALUE

Number.MAX_VALUENumber 物件的一個靜態屬性,值接近於 1.79E+308。大於 Number.MAX_VALUE 的值代表 “Infinity”。

let a = 100;
if(a < Number.MAX_VALUE){
    console.log('success');
}
// success
  • Number.MIN_VALUE

Number.MIN_VALUENumber 物件的一個靜態屬性,值接近於 5e-324,是 JavaScript 裡最接近 0 的正值,而不是最小的負值。

let a = 100;
if(a > Number.MIN_VALUE){
    console.log('success');
}
// success
  • Number.NaN
    Number.NaN 表示“非數字”,和 NaN 一樣。

  • Number.POSITIVE_INFINITY
    Number.POSITIVE_INFINITY 屬性表示正無窮大,值同全域性物件 Infinity 屬性的值相同。

let a = Number.MAX_VALUE * 2;
if(a == Number.POSITIVE_INFINITY){
    console.log('success');
}
// success
  • Number.NEGATIVE_INFINITY
    Number.NEGATIVE_INFINITY 屬性表示負無窮大,值和全域性物件的 Infinity 屬性的負值相同。
let a = - Number.MAX_VALUE * 2;
if(a == Number.NEGATIVE_INFINITY){
    console.log('success');
}
// success
  • Number.EPSILON
    Number.EPSILON屬性表示 1 與Number可表示的大於 1 的最小的浮點數之間的差值,值接近於 2-52
let a = 0.1, b = 0.2, c = 0.3;
let d = (Math.abs(a + b - c) < Number.EPSILON);
d; // true
  • Number.MIN_SAFE_INTEGER
    JS中最小的安全的integer型數字 (-(253 - 1))。

  • Number.MAX_SAFE_INTEGER
    JS中最大的安全的integer型數字 (253 - 1)。

2.數字方法

常見的方法有:

方法 描述
Number.parseFloat() 把字串引數解析成浮點數,和全域性方法 parseFloat() 作用一致.
Number.parseInt() 把字串解析成特定基數對應的整型數字,和全域性方法 parseInt() 作用一致.
Number.isFinite() 判斷傳遞的值是否為有限數字。
Number.isInteger() 判斷傳遞的值是否為整數。
Number.isNaN() 判斷傳遞的值是否為 NaN.
Number.isSafeInteger() 判斷傳遞的值是否為安全整數。

使用方法:

  • Number.parseFloat()
let a1 = 3.1415, a2 = '3.1114';
Number.parseFloat(a1);  // 3.1415;
Number.parseFloat(a2);  // 3.1111;
parseFloat(a1);         // 3.1415;
parseFloat(a2);         // 3.1111;
Number.parseFloat  == parseFloat;// true
  • Number.parseInt()
let a1 = '0110';
Number.parseInt(a1, 2);     // 6
Number.parseInt(a1, 10);    // 110
Number.parseInt = parseInt; // true
  • Number.isFinite()
Number.isFinite(Infinity);  // false
Number.isFinite(NaN);       // false
Number.isFinite(-Infinity); // false
Number.isFinite(0);         // true
Number.isFinite(2e64);      // true
Number.isFinite('0');       // false, 全域性函式 isFinite('0') 會返回 true
  • Number.isInteger()
Number.isInteger(0);         // true
Number.isInteger(1);         // true
Number.isInteger(-100000);   // true
Number.isInteger(0.1);       // false
Number.isInteger(Math.PI);   // false
Number.isInteger(Infinity);  // false
Number.isInteger(-Infinity); // false
Number.isInteger("10");      // false
Number.isInteger(true);      // false
Number.isInteger(false);     // false
Number.isInteger([1]);       // false
  • Number.isNaN()
Number.isNaN(NaN);           // true
Number.isNaN(Number.NaN);    // true
Number.isNaN(0 / 0)          // true
// 下面這幾個如果使用全域性的 isNaN() 時,會返回 true。
Number.isNaN("NaN");         // false,字串 "NaN" 不會被隱式轉換成數字 NaN。
Number.isNaN(undefined);     // false
Number.isNaN({});            // false
Number.isNaN("blabla");      // false
// 下面的都返回 false
Number.isNaN(true);
Number.isNaN(null);
Number.isNaN(37);
Number.isNaN("37");
Number.isNaN("37.37");
Number.isNaN("");
Number.isNaN(" ");
  • Number.isSafeInteger()
Number.isSafeInteger(3);                    // true
Number.isSafeInteger(Math.pow(2, 53))       // false
Number.isSafeInteger(Math.pow(2, 53) - 1)   // true
Number.isSafeInteger(NaN);                  // false
Number.isSafeInteger(Infinity);             // false
Number.isSafeInteger("3");                  // false
Number.isSafeInteger(3.1);                  // false
Number.isSafeInteger(3.0);                  // true

數字型別原型上的方法:

方法 描述 案例
toExponential() 返回一個數字的指數形式的字串 1.23e+2
toFixed() 返回指定小數位數的表示形式 var a=123,b=a.toFixed(2)//b=“123.00”
toPrecision() 返回一個指定精度的數字。 a=123中,3會由於精度限制消失var a=123,b=a.toPrecision(2)//b=“1.2e+2”
  • toExponential()
    指數表示法返回該數值字串表示形式,可接收一個引數指定小數點後幾位數字。
let a = 99.6633;
let a1 = '字串:' + a.toExponential(); // "字串:9.96633e+1"
let a2 = '字串:' + a.toExponential(2);// "字串:9.97e+1"
  • toFixed()
    使用定點表示法來格式化一個數,可接收一個引數指定保留小數點後幾位,取值為0-20之間。
    注意: 返回的資料型別是字串型別。
let a = 1.2345;
a.toFixed();   // "1"
a.toFixed(2);  // "1.23"
  • toPrecision()
    指定的精度返回該數值物件的字串表示,可接收一個引數,用來指定有效數個數的整數。
let a = 1.2345;
let a1 = '字串:' + a.toPrecision(); // "字串:1.2345"
let a2 = '字串:' + a.toPrecision(1);// "字串:1"
let a2 = '字串:' + a.toPrecision(2);// "字串:1.2"

3.數學物件

JS內建的數學物件Math,有很多屬性和方法,這裡需要注意的是Math物件中的三角函式引數都是弧度制的。

方法 描述
abs() 絕對值
sin(), cos(), tan() 標準三角函式;引數為弧度
asin(), acos(), atan(), atan2() 反三角函式; 返回值為弧度
sinh(), cosh(), tanh() 雙曲三角函式; 返回值為弧度.
asinh(), acosh(), atanh() 反雙曲三角函式;返回值為弧度.
pow(), exp(), expm1(), log10(), log1p(), log2() 指數與對數函式
floor(), ceil() 返回最大/最小整數小於/大於或等於引數
min(),max() 返回一個以逗號間隔的數字引數列表中的較小或較大值(分別地)
random() 返回0和1之間的隨機數。
round(),fround(), trunc() 四捨五入和截斷函式
sqrt(), cbrt(), hypot() 平方根,立方根,平方引數的和的平方根
sign() 數字的符號, 說明數字是否為正、負、零。
clz32(),imul() 在32位2進製表示中,開頭的0的數量.返回傳入的兩個引數相乘結果的類C的32位表現形式

完整的描述和使用方法,建議檢視 MDN Math

參考資料

1.MDN 數字和日期


本部分內容到這結束

Author 王平安
E-mail [email protected]
博 客 www.pingan8787.com
微 信 pingan8787
每日文章推薦 https://github.com/pingan8787/Leo_Reading/issues
ES小冊 es.pingan8787.com