ES6精華 數值擴充套件

2021-09-13 15:33:43 字數 3844 閱讀 6266

es6為數值增加了些常量和方法,使計算更為簡便安全。本篇概括了這中的精華知識。

js採用ieee 754標準的64位雙精度格式儲存數值。

數值的精度最多可達到53個二進位制位(1個隱藏位和52個有效位)。

如果數值的精度超過此限度,第54位及後面的會被丟棄。

數值的極值分為兩種:可表示的極值和可精確計算的極值(浮點型不算)。

可表示的極值:[5e-324, 1.7976931348623157e+308]

可精確計算的極值:[1 - math.pow(2, 53), math.pow(2, 53) - 1]

超過精度的數值可正確顯示,但由其計算得出的結果可能不準確。

let num = 9007199254741002;

console.log( num ); // 9007199254741002

console.log( num + 1 ); // 9007199254741004

console.log( num + 3 ); // 9007199254741004

let n1 = math.pow(2, 53) - 1 + 1 + 1;

let n2 = math.pow(2, 53) - 1 + 1 + 2;

console.log(n1 === n2); // true

對於整數,最多能精確顯示16個十進位制位,超過會被截斷。

對於小數,最多能精確顯示小數點後16個十進位制位,超過會被截斷。

超過的位數會被截斷。

console.log( 3.000000000000001 === 3 ); // false

console.log( 3.0000000000000001 === 3 ); // true

console.log( 0.123456789123456891 ); // 0.1234567891234569

二進位制:0b1000b

八進位制:0o1000o0100

十六進製制:0x1000x100

注意,可忽略0100格式表八進位制,因為嚴格模式下不允許使用。

進製間的轉化

使用進製的完整格式,通過tostring在不同進製間轉化。

console.log( (10).tostring(2) ); // 1010

console.log( (0b100).tostring(8) ); // 4

console.log( ('0o100').tostring(16) ); // 40

使用進製的值,通過parseint將其它進製轉換成十進位制。

console.log( parseint(100, 2) ); // 4

console.log( parseint(100, 8) ); // 64

console.log( parseint('100', 16) ); // 256

使用進製的完整格式,通過number將其它進製轉化成十進位制。

console.log( number(0b100) ); // 4

console.log( number('0o100') ); // 64

console.log( number('0x100') ); // 256

完整的api列表:位址。

此模組的方法,不會預設轉化期待為數值型別而實際不是的引數。

將全域性方法isfinite() & isnan(),放到了number模組下。

兩者唯一的差別是,全域性中的方法會預設轉化非數值引數,number模組下的不會。

console.log( isnan('nan') ); // true

- 等價於

console.log( isnan(number('nan')) );

只要不是 nan ,則為 false 。更為嚴格嚴謹。

console.log( number.isnan('nan') ); // false

增加了一些常量和方法為安全計算服務。

isinteger()

判斷乙個數值是否為整數。非數直接為false

在js中,整數和浮點數的儲存方式是相同的,所以2525.0被視為同乙個值。

console.log( number.isinteger('25') ); // false

console.log( number.isinteger(25.0) ); // true

console.log( number.isinteger(3.0000000000000002) ); // true

issafeinteger()

判斷整型數值是否處於安全區間內。非整型即為false

整型數值安全區間:[number.min_safe_integer, number.max_safe_integer]

判斷乙個算式及其結果是否安全,需要驗證它的各個項以及結果。

istrusty(9007199254740993, 990, 9007199254740993 - 990); // 報錯

function istrusty(left, right, result)

throw new rangeerror('operation cannot be trusted!');

}

js能識別的最小精度為number.epsilon,即math.pow(2, -52)

如果誤差小於此精度,就可以認為這點誤差已經沒有意義,即不存在誤差了。

在實際專案中,可以設定計算的容錯誤差,以對比兩個浮點數應不應該相同等等。

console.log( 0.1 + 0.2 ); // 0.30000000000000004

console.log( (0.1 + 0.2) === 0.3 ); // false

console.log( isequalinerrorrange(0.1 + 0.2, 0.3) ); // true

function isequalinerrorrange(left, right)

設定需要精確的位數,將浮點型轉化成整型,來較為安全的計算浮點數。

console.log( countfloat(0.1, 0.2, '+', 14) ); // 0.3

function countfloat(a, b, sign, num)

return res / times;

}

完整的api列表:位址。

此模組的方法,會預設呼叫number()轉化,期待為數值型別而實際不是的引數。

此模組新增了些,可以自行實現的簡易方法,直接查手冊會更有效,就不列舉了。

ES6精華 正則擴充套件

本篇概括了es6中正規表示式新增部分的精華要點 最好有es5的基礎 使正則處於unicode模式。關於es6的字元擴充套件知識,可檢視這裡。處於unicode模式下的正則,可以正確識別32位 四位元組 字元。let c ud83d udc2a 32位字元 console.log s test c f...

ES6 數值擴充套件

1.二進位制表示法 以0b開頭console.log b 0b111110111 4942.八進位制表示法 以0o開頭console.log 0o767 5033.判斷乙個數是否有盡 或者判斷是否為字元console.log 15 number.isfinite 15 isfinite 判斷數值是否...

es6 數值的擴充套件

1 二進位制的表示 字首 0b 八進位制的表示 0o 2 number.isfinite number.isnan 3 number.parseint number.parsefloat 4 number.isinteger number.epsilon 5 number.issafeinteger...