【JS】5--數(shù)字操作(Math數(shù)學(xué)對(duì)象)

數(shù)字

前置知識(shí)
在JavaScript中,數(shù)字為雙精度浮點(diǎn)類型(即一個(gè)數(shù)字范圍只能在-(253-1)和(253-1)之間),整數(shù)類型也一樣。 另外數(shù)字類型也可以是以下三種符號(hào)值:

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

1.數(shù)字對(duì)象

JS中內(nèi)置了Number對(duì)象的一些常量屬性:

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

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

  • Number.MAX_VALUE

Number.MAX_VALUENumber 對(duì)象的一個(gè)靜態(tài)屬性,值接近于 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 對(duì)象的一個(gè)靜態(tài)屬性,值接近于 5e-324,是 JavaScript 里最接近 0 的正值,而不是最小的負(fù)值。

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

  • Number.NaN

Number.NaN 表示“非數(shù)字”,和 NaN 一樣。

  • Number.POSITIVE_INFINITY

Number.POSITIVE_INFINITY 屬性表示正無窮大,值同全局對(duì)象 Infinity 屬性的值相同。

let a = Number.MAX_VALUE * 2;
if(a == Number.POSITIVE_INFINITY){
    console.log('success');
}
// success

  • Number.NEGATIVE_INFINITY

Number.NEGATIVE_INFINITY 屬性表示負(fù)無窮大,值和全局對(duì)象的 Infinity 屬性的負(fù)值相同。

let a = - Number.MAX_VALUE * 2;
if(a == Number.NEGATIVE_INFINITY){
    console.log('success');
}
// success

  • Number.EPSILON

Number.EPSILON屬性表示 1 與Number可表示的大于 1 的最小的浮點(diǎn)數(shù)之間的差值,值接近于 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型數(shù)字 (-(253 - 1))。

  • Number.MAX_SAFE_INTEGER

JS中最大的安全的integer型數(shù)字 (253 - 1)。

2.數(shù)字方法

常見的方法有:

方法 描述
Number.parseFloat() 把字符串參數(shù)解析成浮點(diǎn)數(shù),和全局方法 parseFloat() 作用一致.
Number.parseInt() 把字符串解析成特定基數(shù)對(duì)應(yīng)的整型數(shù)字,和全局方法 parseInt()作用一致.
Number.isFinite() 判斷傳遞的值是否為有限數(shù)字。
Number.isInteger() 判斷傳遞的值是否為整數(shù)。
Number.isNaN() 判斷傳遞的值是否為 NaN.
Number.isSafeInteger() 判斷傳遞的值是否為安全整數(shù)。

使用方法:

  • 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, 全局函數(shù) isFinite('0') 會(huì)返回 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
// 下面這幾個(gè)如果使用全局的 isNaN() 時(shí),會(huì)返回 true。
Number.isNaN("NaN");         // false,字符串 "NaN" 不會(huì)被隱式轉(zhuǎn)換成數(shù)字 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

數(shù)字類型原型上的方法:

方法 描述 案例
toExponential() 返回一個(gè)數(shù)字的指數(shù)形式的字符串 1.23e+2
toFixed() 返回指定小數(shù)位數(shù)的表示形式 var a=123,b=a.toFixed(2)//b="123.00"
toPrecision() 返回一個(gè)指定精度的數(shù)字。 a=123中,3會(huì)由于精度限制消失var a=123,b=a.toPrecision(2)//b="1.2e+2"
  • toExponential()

指數(shù)表示法返回該數(shù)值字符串表示形式,可接收一個(gè)參數(shù)指定小數(shù)點(diǎn)后幾位數(shù)字。

let a = 99.6633;
let a1 = '字符串:' + a.toExponential(); // "字符串:9.96633e+1"
let a2 = '字符串:' + a.toExponential(2);// "字符串:9.97e+1"

  • toFixed()

使用定點(diǎn)表示法來格式化一個(gè)數(shù),可接收一個(gè)參數(shù)指定保留小數(shù)點(diǎn)后幾位,取值為0-20之間。 注意: 返回的數(shù)據(jù)類型是字符串類型。

let a = 1.2345;
a.toFixed();   // "1"
a.toFixed(2);  // "1.23"

  • toPrecision()

指定的精度返回該數(shù)值對(duì)象的字符串表示,可接收一個(gè)參數(shù),用來指定有效數(shù)個(gè)數(shù)的整數(shù)。

let a = 1.2345;
let a1 = '字符串:' + a.toPrecision(); // "字符串:1.2345"
let a2 = '字符串:' + a.toPrecision(1);// "字符串:1"
let a2 = '字符串:' + a.toPrecision(2);// "字符串:1.2"

3. Math 數(shù)學(xué)對(duì)象

JS內(nèi)置的數(shù)學(xué)對(duì)象 Math,有很多屬性和方法,這里需要注意的是 Math對(duì)象中的三角函數(shù)參數(shù)都是弧度制的。

方法 描述
常用 ------
math 數(shù)學(xué)
PI 圓周率
max 最大
min 最小
floor 地板(去掉小數(shù))
ceil 天花板(逢小數(shù)進(jìn)1)
round 四舍五入
random 產(chǎn)生隨機(jī)
abs absolute 絕對(duì)值
擴(kuò)展 ------
abs() 絕對(duì)值
sin(), cos(), tan() 標(biāo)準(zhǔn)三角函數(shù);參數(shù)為弧度
pow(), exp(), expm1(), log10(), log1p(), log2() 指數(shù)與對(duì)數(shù)函數(shù)
floor(), ceil() 返回最大/最小整數(shù)小于/大于或等于參數(shù)
min(), max() 返回一個(gè)以逗號(hào)間隔的數(shù)字參數(shù)列表中的較小或較大值(分別地)
random() 返回0和1之間的隨機(jī)數(shù)。
round(), fround(), trunc() 四舍五入和截?cái)嗪瘮?shù)
sqrt(), cbrt(), hypot() 平方根,立方根,平方參數(shù)的和的平方根
sign() 數(shù)字的符號(hào), 說明數(shù)字是否為正、負(fù)、零。

1. Math.PI

js里自帶一些對(duì)象,供我們開發(fā)者使用,這些對(duì)象提前內(nèi)置準(zhǔn)備好了一些常用的屬性和方法,我們直接拿來用就可以了。
比如:圓周率 3.1415926 Math.PI
Math內(nèi)置對(duì)象 不是一個(gè)構(gòu)造函數(shù) 所以直接使用不需要new
Math.PI 直接使用,不需要?jiǎng)?chuàng)建

console.log(Math.PI)//3.1415926

2. Math.max()

3. Math.min()

返回一組數(shù)字中的最大/小值,如果給定的參數(shù)中至少有一個(gè)參數(shù)無法轉(zhuǎn)換為數(shù)字則返回NaN。

console.log(Math.max(10,22,5));//22
console.log(Math.max(10,'a',5));//NaN
console.log(Math.min(10,22,5));//5
console.log(Math.min(10,'a,5));//NaN

4. Math.floor ()

Math.floor 向下取整

console.log(Math.floor(1.1));//1
console.log(Math.floor(1.5));//1
console.log(Math.floor(1.9));//1

console.log(Math.floor(-1.1));//-2
console.log(Math.floor(-1.5));//-2
console.log(Math.floor(-1.9));//-22

5. Math.ceil()

Math.ceil向上取整

console.log(Math.ceil(1.1));//2
console.log(Math.ceil(1.5));//2
console.log(Math.ceil(1.9));//2
console.log(Math.ceil(-1.1));//-1
console.log(Math.ceil(-1.5));//-1
console.log(Math.ceil(-1.9));//-1

6. Math.round ()

Math.round四舍五入 就近取整
console.log(Math.round(1.1));//1
console.log(Math.round(1.9));//2
console.log(Math.round(-1.1));//-1
console.log(Math.round(-1.9));//-2
//.5誰大取誰
console.log(Math.round(1.5));//2
console.log(Math.round(-1.5));//-1

7. Math.random ()

Math.random生成隨機(jī)數(shù)(重點(diǎn))
返回的是0~1之間的隨機(jī)小數(shù) [0,1)
這個(gè)隨機(jī)函數(shù)括號(hào)之間不寫參數(shù)

console.log(Math.random());
得到一個(gè)兩個(gè)數(shù)之間的隨機(jī)整數(shù),包括兩個(gè)數(shù)在內(nèi)的方法:

function getRandom(min,max){
    return Math.floor(Math.random()*(max-min+1))+min;
}
console.log(getRandom(0,5));

案例:隨機(jī)生成背景顏色

<style>
    body {
        background-color: rgb(0, 255, 0);
    }
</style>

<script>
function getRandom(min,max){
    return Math.floor(Math.random()*(max-min+1))+min;
}
console.log(getRandom(0,5));
function getRandomColor(){
    var c1=getRandom(0,255);
    var c2=getRandom(0,255);
    var c3=getRandom(0,255);
    return 'rgb(' + c1 + ',' + c2 + ',' + c3 + ')'
 }
console.log(getRandomColor());

 // 下面的代碼演示寫的程序沒有錯(cuò)誤 

window.onload = function() {
    document.body.style.backgroundColor = getRandomColor();
}
</script>

8. Math.abs()

alert(Math.abs(-1));   //1
alert(Math.abs('1'));  //1  隱式轉(zhuǎn)換 講字符型轉(zhuǎn)換為數(shù)值型  再取絕對(duì)值
alert(Math.abs('abs'));  //NaN  如果里面參數(shù) 有非數(shù)字型的 字符串   返回的結(jié)果是 NaN

完整的描述和使用方法,建議查看 MDN Math

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持,譯者再次奉上一點(diǎn)點(diǎn)福利:阿里云產(chǎn)品券,享受所有官網(wǎng)優(yōu)惠,并抽取幸運(yùn)大...
    HetfieldJoe閱讀 1,389評(píng)論 0 15
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,666評(píng)論 0 4
  • 屬性 Math.E 表示自然對(duì)數(shù)的底數(shù)(或稱為基數(shù)),e,約等于 2.718。 方法 1、Math.abs() 函...
    PYFang閱讀 1,659評(píng)論 0 3
  • 特別說明,為便于查閱,文章轉(zhuǎn)自https://github.com/getify/You-Dont-Know-JS...
    殺破狼real閱讀 256評(píng)論 0 0
  • 語法基礎(chǔ) - 詞法 字符集 Unicode字符集, 區(qū)分大小寫 注釋 // /* */ 直接量 數(shù)字 小數(shù) 字符串...
    KeKeMars閱讀 989評(píng)論 1 11

友情鏈接更多精彩內(nèi)容