商城網(wǎng)站開發(fā)需求seo智能優(yōu)化
MENU
- 方法一
- 方式二
- 方式三
- 方式四
- 方式五
- 結(jié)束語(yǔ)
方法一
使用取余運(yùn)算符判斷,利用任何整數(shù)都會(huì)被1整除的原理,即余數(shù)是0的特點(diǎn),通過(guò)這個(gè)規(guī)則來(lái)判斷是否是整數(shù)。
let isInteger = (val) => val % 1 === 0;// true isInteger(5); // false isInteger(5.72);
以上輸出可以看出這個(gè)函數(shù)挺好用,但對(duì)于
字符串
和某些特殊值
則需要完善一下檢驗(yàn)規(guī)則,否則會(huì)被"欺騙",對(duì)于空字符串、字符串類型數(shù)字、布爾true、空數(shù)組都返回true。在取余的時(shí)候,它們都會(huì)進(jìn)行類型裝換,下面例子中的空字符串,空數(shù)組都是轉(zhuǎn)化成0,而true轉(zhuǎn)成1。// true isInteger(''); // true isInteger('5'); // true isInteger(true); // true isInteger([]);
優(yōu)化
let isInteger = (val) => typeof val === 'number' && val % 1 === 0;// false isInteger(''); // false isInteger('5'); // false isInteger(true); // false isInteger([]);
方式二
使用
Math.round
、Math.ceil
、Math.floor
判斷。整數(shù)取整后還是等于自己,利用這個(gè)特性來(lái)判斷是否是整數(shù)。
Math.floor
方法中會(huì)自動(dòng)將參數(shù)轉(zhuǎn)成數(shù)字進(jìn)行向下取值,同理使用Math.ceil
向上取整,Math.round
四舍五入。let isInteger = (val) => Math.floor(val) === val;// true isInteger(5); // false isInteger(5.72); // false isInteger(''); // false isInteger('5'); // false isInteger(true); // false isInteger([]);
方式三
通過(guò)parseInt()判斷。利用parseInt()十進(jìn)制的轉(zhuǎn)化特點(diǎn)。
let isInteger = (val) => parseInt(val, 10) === val;// true isInteger(5); // false isInteger(5.72); // false isInteger(''); // false isInteger('5.72'); // false isInteger(true); // false isInteger([]);
但是對(duì)于超過(guò)檢測(cè)范圍的數(shù)就會(huì)不再檢測(cè),統(tǒng)一返回該檢測(cè)數(shù)字的首個(gè)數(shù)字。
// 1 false parseInt(1000000000000000000000); // 4 false parseInt(412300213123400000000.21312);
方式四
通過(guò)位運(yùn)算
|
判斷。按位或運(yùn)算符|
是雙目運(yùn)算符, 其功能是將參與運(yùn)算的兩數(shù)轉(zhuǎn)成32位二進(jìn)制后,各對(duì)應(yīng)的二進(jìn)位相或。只要對(duì)應(yīng)的二個(gè)二進(jìn)位有一個(gè)為1時(shí),結(jié)果位就為1。因此利用該特性,任一數(shù)字和0位或都是返回它本身,同理非數(shù)字都是進(jìn)行類型轉(zhuǎn)化后再進(jìn)行位或。let isInteger(val) => (val | 0) === val;// true isInteger(5); // false isInteger(5.72); // false isInteger(''); // false isInteger('5'); // false isInteger(true); // false isInteger([]);
關(guān)于位或運(yùn)算,效率比Math.floor和parseInt高。
位運(yùn)算的使用場(chǎng)景及封裝
方式五
ES6提供了Number.isInteger。這是Number中的一個(gè)API方法,用來(lái)判斷給定參數(shù)是否為整數(shù)。
瀏覽器兼容上大多數(shù)已經(jīng)實(shí)現(xiàn)支持,目前IE并不支持。// true Number.isInteger(5); // false Number.isInteger(5.72); // false Number.isInteger(''); // false Number.isInteger('5'); // false Number.isInteger(true); // false Number.isInteger([]);
結(jié)束語(yǔ)
以上就是判斷是否為整數(shù)類型的五種方式,這五種方式各有優(yōu)缺點(diǎn),大家可以進(jìn)行仔細(xì)比較,選擇最優(yōu)的進(jìn)行使用。