作者:米書(shū)林
參考文章:《菜鳥(niǎo)教程》、《 ECMAScript 6 入門(mén)》(阮一峰)
新的表示法
1.新的二進(jìn)制表示法
ES6定義的以前綴0b
或0B
來(lái)表示二進(jìn)制數(shù)值
console.log(0b11 === 3); // true
console.log(0B11 === 3); // true
2.新的八進(jìn)制表示法
ES6定義的以前綴0o
或0O
來(lái)表示二進(jìn)制數(shù)值
console.log(0o11 === 9); // true
console.log(0O11 === 9); // true
如果要將0b和0o前綴的字符串?dāng)?shù)值轉(zhuǎn)為十進(jìn)制,要使用Number方法热某。
Number('0b111') // 7
Number('0o10') // 8
新值
1.常量—Number.EPSILON
表示:1 與大于 1 的最小浮點(diǎn)數(shù)之間的差月杉。它的值接近于 2.2204460492503130808472633361816E-16糖儡,或者 2-52斗躏。
0.1 + 0.2 === 0.3; // false
// 在誤差范圍內(nèi)即視為相等
equal = (Math.abs(0.1 - 0.3 + 0.2) < Number.EPSILON); // true
2.最大/最小安全整數(shù)
安全整數(shù)表示在 JavaScript 中能夠精確表示的整數(shù)柱告,安全整數(shù)的范圍在 2 的 -53 次方到 2 的 53 次方之間(不包括兩個(gè)端點(diǎn))层释,超過(guò)這個(gè)范圍的整數(shù)無(wú)法精確表示婆瓜。
最大安全整數(shù)
安全整數(shù)范圍的上限,即 2 的 53 次方減 1 贡羔。
Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2; // true
Number.MAX_SAFE_INTEGER === Number.MAX_SAFE_INTEGER + 1; // false
Number.MAX_SAFE_INTEGER - 1 === Number.MAX_SAFE_INTEGER - 2; // false
最小安全整數(shù)
安全整數(shù)范圍的下限廉白,即 2 的 53 次方減 1 的負(fù)數(shù)。
Number.MIN_SAFE_INTEGER + 1 === Number.MIN_SAFE_INTEGER + 2; // false
Number.MIN_SAFE_INTEGER === Number.MIN_SAFE_INTEGER - 1; // false
Number.MIN_SAFE_INTEGER - 1 === Number.MIN_SAFE_INTEGER - 2; // true
Number的新方法
1.Number.isFinite()
用于檢查一個(gè)數(shù)值是否為有限的( finite )乖寒,即不是 Infinity
console.log( Number.isFinite(1)); // true
console.log( Number.isFinite(0.1)); // true
// NaN 不是有限的
console.log( Number.isFinite(NaN)); // false
console.log( Number.isFinite(Infinity)); // false
console.log( Number.isFinite(-Infinity)); // false
// Number.isFinate 沒(méi)有隱式的 Number() 類(lèi)型轉(zhuǎn)換猴蹂,所有非數(shù)值都返回 false
console.log( Number.isFinite('foo')); // false
console.log( Number.isFinite('15')); // false
console.log( Number.isFinite(true)); // false
2.Number.isNaN()
用于檢查一個(gè)值是否為 NaN
console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN('true'/0)); // true
// 在全局的 isNaN() 中,以下皆返回 true楣嘁,因?yàn)樵谂袛嗲皶?huì)將非數(shù)值向數(shù)值轉(zhuǎn)換
// 而 Number.isNaN() 不存在隱式的 Number() 類(lèi)型轉(zhuǎn)換磅轻,非 NaN 全部返回 false
Number.isNaN("NaN"); // false
Number.isNaN(undefined); // false
Number.isNaN({}); // false
Number.isNaN("true"); // false
3.Number.isInteger()
用于判斷給定的參數(shù)是否為整數(shù)。
Number.isInteger(value)
Number.isInteger(0); // true
// JavaScript 內(nèi)部逐虚,整數(shù)和浮點(diǎn)數(shù)采用的是同樣的儲(chǔ)存方法,因此 1 與 1.0 被視為相同的值
Number.isInteger(1); // true
Number.isInteger(1.0); // true
Number.isInteger(1.1); // false
Number.isInteger(Math.PI); // false
// NaN 和正負(fù) Infinity 不是整數(shù)
Number.isInteger(NaN); // 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
// 數(shù)值的精度超過(guò) 53 個(gè)二進(jìn)制位時(shí)聋溜,由于第 54 位及后面的位被丟棄,會(huì)產(chǎn)生誤判
Number.isInteger(1.0000000000000001) // true
// 一個(gè)數(shù)值的絕對(duì)值小于 Number.MIN_VALUE(5E-324)叭爱,即小于 JavaScript 能夠分辨
// 的最小值撮躁,會(huì)被自動(dòng)轉(zhuǎn)為 0,也會(huì)產(chǎn)生誤判
Number.isInteger(5E-324); // false
Number.isInteger(5E-325); // true
4.Number.isSafeInteger()
用于判斷數(shù)值是否在安全范圍內(nèi)买雾。
Number.isSafeInteger(Number.MIN_SAFE_INTEGER - 1); // false
Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1); // false
從全局移植到Number的方法
1.Number.parseInt()
用于將給定字符串轉(zhuǎn)化為指定進(jìn)制的整數(shù)把曼。
// 不指定進(jìn)制時(shí)默認(rèn)為 10 進(jìn)制
Number.parseInt('12.34'); // 12
Number.parseInt(12.34); // 12
// 指定進(jìn)制
Number.parseInt('0011',2); // 3
// 與全局的 parseInt() 函數(shù)是同一個(gè)函數(shù)
Number.parseInt === parseInt; // true
2.Number.parseFloat()
用于把一個(gè)字符串解析成浮點(diǎn)數(shù)杨帽。
Number.parseFloat('123.45') // 123.45
Number.parseFloat('123.45abc') // 123.45
// 無(wú)法被解析成浮點(diǎn)數(shù),則返回 NaN
Number.parseFloat('abc') // NaN
// 與全局的 parseFloat() 方法是同一個(gè)方法
Number.parseFloat === parseFloat // true
Math對(duì)象的擴(kuò)展
ES6 在 Math 對(duì)象上新增了 17 個(gè)數(shù)學(xué)相關(guān)的靜態(tài)方法嗤军,這些方法只能在 Math 中調(diào)用注盈。
屬性 | 作用 | 用法 | 是否進(jìn)行類(lèi)型轉(zhuǎn)換 |
---|---|---|---|
Math.cbrt | 計(jì)算立方根 | Math.cbrt(1); | 是 |
Math.imul | 計(jì)算兩個(gè)32 位帶符號(hào)整數(shù)形式相乘的結(jié)果,返回的也是一個(gè) 32 位的帶符號(hào)整數(shù)型雳。 | Math.imul(1, 2); | 是 |
Math.hypot | 用于計(jì)算所有參數(shù)的平方和的平方根当凡。 | Math.hypot(1, 2, '3'); | 是 |
Math.clz32 | 用于返回?cái)?shù)字的32 位無(wú)符號(hào)整數(shù)形式的前導(dǎo)0的個(gè)數(shù)。 | Math.clz32(0); | 是 |
Math.trunc | 用于返回?cái)?shù)字的整數(shù)部分纠俭。 | Math.trunc(12.3) | 是 |
Math.fround | 用于獲取數(shù)字的32位單精度浮點(diǎn)數(shù)形式沿量。 | Math.fround(1.234) | 是 |
Math.sign | 判斷數(shù)字的符號(hào)(正、負(fù)冤荆、0)朴则。 | Math.sign(1); | 是 |
Math.expm1() | 用于計(jì)算 e 的 x 次方減 1 的結(jié)果相當(dāng)于 Math.exp(x) - 1 | Math.expm1(1); | 是 |
Math.log1p(x) | 用于計(jì)算1 + x 的自然對(duì)數(shù),即 Math.log(1 + x) 钓简。 | Math.log1p(1); | 是 |
Math.log10(x) | 用于計(jì)算以 10 為底的 x 的對(duì)數(shù)乌妒。 | Math.log10(1); | 是 |
Math.log2() | 用于計(jì)算 2 為底的 x 的對(duì)數(shù)。 | Math.log2(1); | 是 |
Math.sinh(x) | 用于計(jì)算雙曲正弦 | Math.sinh(x) | — |
Math.cosh(x) | 用于計(jì)算雙曲余弦 | Math.cosh(x) | — |
Math.tanh(x) | 用于計(jì)算雙曲正切 | Math.tanh(x) | — |
Math.asinh(x) | 用于計(jì)算反雙曲正弦 | Math.asinh(x) | — |
Math.acosh(x) | 用于計(jì)算反雙曲余弦 | Math.acosh(x) | — |
Math.atanh(x) | 用于計(jì)算反雙曲正切 | Math.atanh(x) | — |
** | 用于計(jì)算第一個(gè)數(shù)的第二個(gè)數(shù)次方 | 1 ** 2; | — |