ES6隨筆--各數據類型的擴展(2)--數值
ES6隨筆--各數據類型的擴展(2)--數值
二進制和八進制表示
二進制0b
(或0B
)表示;八進制0o
(或0O
)表示;
這兩種字符串轉換成十進制數值,使用Number()
方法;
Number(‘0b111‘) // 7
Number.isFinite(), Number.isNaN();
Number.isFinite()
的參數如果不是數值,一律返回false
, Infinity
/-Infinity
/NaN
都返回false
;
Number.isNaN()
對不是NaN
的參數一律返回false
;
這兩個方法與傳統全局方法相比沒有進行數值轉換,對於非數值參數一律返回false
。
Number.parseInt(), Number.parseFloat();
與原來的全局方法行為相同,這樣做是為了減少全局方法,逐步模塊化;
Number.isInteger()
判斷一個參數是否為整數,如果數據要求精度較高,可能會不準確;
Number.EPSILON
表示1與大於1的最小浮點數之間的差值(常量);實際上是JS能夠表示的最小精度;
Number.EPSILON === Math.pow(2, -52)
可以用來設置“可以接受的誤差範圍”。
安全整數和Number.isSafeInteger()
JS能夠精確表示的整數範圍在Number.MIN_SAFE_INTEGER
和Number.MAX_SAFE_INTEGER
之間;這個範圍內是“安全的”,否則就會“不安全”,檢驗方法為Number.isSafeInteger()
但是對於一個運算,則要對運算數和結果都檢驗,全部在安全整數範圍內結果才是可信的。
Math對象的擴展
1) Math.trunc()
去除小數部分,保留整數部分,相當於
Math.trunc = Math.trunc || function(x) {
return x < 0 ? Math.ceil(x) : Math.floor(x);
};
非數值會先轉換為數值,不能截取數值或空值,返回NaN
;
2) Math.sign()
:確認一個參數是正數、負數還是零;非數值會先轉換為數值;無法轉換則返回NaN
;相當於
Math.sign = Math.sign || function(x) { x = +x; // convert to a number if (x === 0 || isNaN(x)) { return x; } return x > 0 ? 1 : -1; };
返回值包括+1
,-1
, 0
, -0
, NaN
;
3) Nath.cbrt()
: 計算一個數的立方根;相當於
Math.cbrt = Math.cbrt || function(x) {
var y = Math.pow(Math.abs(x), 1/3);
return x < 0 ? -y : y;
};
4) Math.clz32()
,返回一個數的32位無符號整數形式有多少前導零;對空值或其他類型值會先轉換為數值再計算;
5) Math.imul()
,返回兩個數以 32 位帶符號整數形式相乘的結果,返回的也是一個 32位的帶符號整數;對於那些很大的數的乘法,低位數值往往都是不精確的,Math.imul方法可以返回正確的低位數值.
Math.imul(0x7fffffff, 0x7fffffff) // 1
6) Math.fround()
, 返回一個數的32位單精度浮點數形式。
7) Math.hypot()
, 返回所有參數的平方和的平方根。
4個對數方法:
8) Math.expm1()
, 返回Math.exp(x)-1
;
9) Math.log1p()
, 返回1+x
的自然對數;
10) Math.log10()
, 返回以10
為底的x
的對數,如果x
小於0,則返回NaN
;
11) Math.log2()
, 返回以2
為底的x
的對數,如果x
小於0,則返回NaN
;
6個雙曲函數方法;
指數運算符(**
):對於特別大的運算結果,與Math.pow()
結果會有細微差異;與等號連用,作為新的賦值符:
a **= 2 // a = a ** 2; a = a * a;
b **= 3 // b = b ** 3; b = b * b * b;
ES6隨筆--各數據類型的擴展(2)--數值