本文是 重溫基礎 系列文章的第六篇。今日感受:自己需要多總結,會有不同收穫(比如今晚我做的轉正總結)。
系列目錄:
- 【複習資料】ES6/ES7/ES8/ES9資料整理(個人整理)
- 【重溫基礎】1.語法和資料型別
- 【重溫基礎】2.流程控制和錯誤處理
- 【重溫基礎】3.迴圈和迭代
- 【重溫基礎】4.函式
- 【重溫基礎】5.表示式和運算子
本章節複習的是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_VALUE
是 Number
物件的一個靜態屬性,值接近於 1.79E+308
。大於 Number.MAX_VALUE
的值代表 “Infinity
“。
let a = 100;
if(a <
Number.MAX_VALUE){
console.log('success');
}// success複製程式碼
Number.MIN_VALUE
Number.MIN_VALUE
是 Number
物件的一個靜態屬性,值接近於 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);
// 6Number.parseInt(a1, 10);
// 110Number.parseInt = parseInt;
// true複製程式碼
- Number.isFinite()
Number.isFinite(Infinity);
// falseNumber.isFinite(NaN);
// falseNumber.isFinite(-Infinity);
// falseNumber.isFinite(0);
// trueNumber.isFinite(2e64);
// trueNumber.isFinite('0');
// false, 全域性函式 isFinite('0') 會返回 true複製程式碼
- Number.isInteger()
Number.isInteger(0);
// trueNumber.isInteger(1);
// trueNumber.isInteger(-100000);
// trueNumber.isInteger(0.1);
// falseNumber.isInteger(Math.PI);
// falseNumber.isInteger(Infinity);
// falseNumber.isInteger(-Infinity);
// falseNumber.isInteger("10");
// falseNumber.isInteger(true);
// falseNumber.isInteger(false);
// falseNumber.isInteger([1]);
// false複製程式碼
- Number.isNaN()
Number.isNaN(NaN);
// trueNumber.isNaN(Number.NaN);
// trueNumber.isNaN(0 / 0) // true// 下面這幾個如果使用全域性的 isNaN() 時,會返回 true。Number.isNaN("NaN");
// false,字串 "NaN" 不會被隱式轉換成數字 NaN。Number.isNaN(undefined);
// falseNumber.isNaN({
});
// falseNumber.isNaN("blabla");
// false// 下面的都返回 falseNumber.isNaN(true);
Number.isNaN(null);
Number.isNaN(37);
Number.isNaN("37");
Number.isNaN("37.37");
Number.isNaN("");
Number.isNaN(" ");
複製程式碼
- Number.isSafeInteger()
Number.isSafeInteger(3);
// trueNumber.isSafeInteger(Math.pow(2, 53)) // falseNumber.isSafeInteger(Math.pow(2, 53) - 1) // trueNumber.isSafeInteger(NaN);
// falseNumber.isSafeInteger(Infinity);
// falseNumber.isSafeInteger("3");
// falseNumber.isSafeInteger(3.1);
// falseNumber.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
參考資料
本部分內容到這結束
Author | 王平安 |
---|---|
pingan8787@qq.com | |
博 客 | www.pingan8787.com |
微 信 | pingan8787 |
每日文章推薦 | github.com/pingan8787/… |
JS小冊 | js.pingan8787.com |