網(wǎng)站兼容性怎么調(diào)培訓(xùn)方案怎么做
1. 二進(jìn)制和八進(jìn)制的表示法
二進(jìn)制和八進(jìn)制的前綴分別為0b(或0B)和0o(或0O)表示
在ES5的嚴(yán)格模式下,八進(jìn)制不再允許使用前綴0
表示
如果要將0b
和0x
前綴的字符串?dāng)?shù)值轉(zhuǎn)為十進(jìn)制,要使用Number方法
Number('0b111'); // 7
Number('0o10'); // 8
2. Number.isFinite()、Number.isNaN()
Number.isFinite()
用來(lái)檢測(cè)一個(gè)數(shù)值是否是有限的(finite)。
Number.isFinite(15); // true
Number.isFinite(NaN); // false
Number.isFinite(Infinity); // false
Number.isFinite('foo'); // false
Number.isFinite(true); // false
Number.isNaN()
用來(lái)檢測(cè)一個(gè)值是否為NaN
Number.isNaN(NaN); // true
Number.isNaN(14); // false
Number.isNaN('str'); // false
Number.isNaN(true); // false
Number.isNaN(9/NaN); // true
這兩個(gè)方法與全局的isFinite()
和isNaN()
相比,之前的會(huì)先調(diào)用Number()將非數(shù)值轉(zhuǎn)為數(shù)
值,然后再進(jìn)行判斷,這兩個(gè)方法會(huì)直接判斷,只對(duì)數(shù)值有效,其他非數(shù)值一律為false。
3. Number.parseInt()、Number.parseFloat()
只是將全局的方法移到了Number上
4. Number.isInteger()
用來(lái)判斷一個(gè)值是否為整數(shù),在js中整數(shù)和浮點(diǎn)數(shù)是同樣的存儲(chǔ)方法,所以3和3.0視為同一個(gè)數(shù)。
Number.isInteger(25); // true
Number.isInteger(25.0); // true
Number.isInteger(25.1); // false
Number.isInteger('25'); // false
Number.isInteger(true); // false
5. Number.EPSILON
規(guī)定一個(gè)極小的常量,目的是為了浮點(diǎn)數(shù)計(jì)算設(shè)置一個(gè)誤差范圍,因?yàn)楦↑c(diǎn)數(shù)計(jì)算是不準(zhǔn)確,只要是誤差小于這個(gè)常量默認(rèn)就是得到了一個(gè)正確結(jié)果。
說(shuō)白了就是一個(gè)可以接受的誤差范圍。
Number.EPSILON = 2.220446049250313eˉ16
0.1 + 0.2 = 0.30000000000000004
6. 安全整數(shù)和Number.isSafeInteger()
因?yàn)樵趈s中能夠準(zhǔn)確表示的整數(shù)范圍是-2^53
到2^53
之間(不包含兩個(gè)端點(diǎn)),超過(guò)這個(gè)范圍就無(wú)法精確表示,所以可以使用Number.isSafeInteger()判斷某個(gè)值是否是安全的。
Number.MAX_SAFE_INTEGER 代表js能準(zhǔn)準(zhǔn)確表示的最大值。
Number.MIN_SAFE_INTEGER 代表js能準(zhǔn)準(zhǔn)確表示的最小值。
Number.isSafeInteger(9) // true
Number.isSafeInteger('a') // false
Number.isSafeInteger(true) // false
Number.isSafeInteger(NaN) // false
Number.isSafeInteger(Infinity) // false
Number.isSafeInteger(-Infinity) // false
isSafeInteger函數(shù)是如何實(shí)現(xiàn)的
Number.isSafeInteger = function (n) {return (typeof n === 'number' && Math.round(n) === n && Number.MIN_SAFE_INTEGER <= n && n <= Number.MAX_SAFE_INIEGER);
}
在使用Number.isSafeInteger驗(yàn)證時(shí),若有運(yùn)算不僅要驗(yàn)證結(jié)果,也要驗(yàn)證參與運(yùn)算的每個(gè)值,否則會(huì)出現(xiàn)問(wèn)題。
Number.isSafeInteger(9007199254740993) // false
Number.isSafeInteger(900) // true
Number.isSafeInteger(9007199254740993 - 900) // true
9007199254740993 - 900 = 9007199254740002
可以看出9007199254740993不是安全整數(shù),但是計(jì)算結(jié)果卻是安全的。這是因?yàn)閿?shù)據(jù)超出了精度范圍,就會(huì)以最大值存儲(chǔ)。
7. Math對(duì)象的擴(kuò)展
1. Math.trunc()
用來(lái)去除一個(gè)數(shù)的小數(shù)部分,返回整數(shù)部分。
Math.trunc(4.1); // 4
Math.trunc(4.9); // 4
Math.trunc(-4.1); // 4
Math.trunc(-4.0); // 4
Math.trunc(-0.12); // 0
對(duì)于非數(shù)值會(huì)先使用Number轉(zhuǎn)化,會(huì)向下取整。
Math.trunc('123.23'); // 123
對(duì)于空值和無(wú)法截取的整數(shù)返回NaN
Math.trunc(NaN); // NaN
Math.trunc('foo'); // NaN
Math.trunc(); // NaN
對(duì)于不支持該方法,可以用此代碼代替
Math.trunc = Math.trunc || function(x) {return x < 0 ? Math.ceill(x) : Math.floor(x);
}
2. Math.sign()
用來(lái)判斷一個(gè)數(shù)到底是正數(shù)、負(fù)數(shù)還是零,對(duì)于非數(shù)值,會(huì)先將其轉(zhuǎn)化為數(shù)值。
- 參數(shù)為正數(shù),返回 +1
- 參數(shù)為負(fù)數(shù),返回-1
- 參數(shù)0,返回0
- 參數(shù)-0,返回0
- 其他值,返回NaN
對(duì)于不支持該方法,可以用此代碼代替
Math.sign = Math.sign || function(x) {x = +x; // convert to a numberif (x === 0 || isNaN(x)) {return x;}return x > 0 ? 1 : -1;
}
3. Math.cbrt()
用來(lái)計(jì)算一個(gè)數(shù)的立方根
Math.cbrt(-1); // -1
Math.cbrt(1); // 1
Math.cbrt(8); // 2
對(duì)于非數(shù)值,會(huì)先使用Number進(jìn)行轉(zhuǎn)換
對(duì)于不支持該方法,可以用此代碼代替
Math.cbrt = Math.cbrt || function (x) {var y = Math.pow(Math.abs(x), 1/3);return x < 0 ? -y : y;
}
4. Math.fround()
返回一個(gè)數(shù)的單精度浮點(diǎn)數(shù)形式
Math.fround(0); // 0
Math.fround(1); // 1
Math.fround(1.337); // 1.3370000123977661
Math.fround(NaN); // NaN
對(duì)于不支持該方法,可以用此代碼代替
Math.fround = Math.fround || function(x) {return new Float32Array([x])[0];
}