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
二進位制:0b100
或0b
。
八進位制:0o100
或0o
或0100
。
十六進製制:0x100
或0x100
。
注意,可忽略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中,整數和浮點數的儲存方式是相同的,所以25
和25.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...