欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在JavaScript中判斷整型的N種方法示例介紹

 更新時(shí)間:2014年06月18日 16:50:49   投稿:whsnow  
這篇文章主要介紹了在JavaScript中判斷整型的N種方法,需要的朋友可以參考下

整數(shù)類型(Integer)在JavaScript經(jīng)常會(huì)導(dǎo)致一些奇怪的問題。在ECMAScript的規(guī)范中,他們只存在于概念中:

所有的數(shù)字都是浮點(diǎn)數(shù),并且整數(shù)只是沒有一組沒有小數(shù)的數(shù)字。

在這篇博客中,我會(huì)解釋如何去檢查某個(gè)值是否為整型。
ECMAScript 5

在ES5中有很多方法你可以使用。有時(shí)侯,你可能想用自己的方法:一個(gè)isInteger(x)的函數(shù),如果是整型返回true,否則返回false.

讓我們看看一些例子。

通過余數(shù)檢查

你可以使用余數(shù)運(yùn)算(%),將一個(gè)數(shù)字按1求余,看看余數(shù)是不是0。

function isInteger(x) {
  return x % 1 === 0;
}

我喜歡這個(gè)方法,因?yàn)樗浅:?jiǎn)單,而且有效。

> isInteger(17)
true
> isInteger(17.13)
false

在操作余數(shù)運(yùn)算時(shí)你得小心一點(diǎn),因?yàn)榻Y(jié)果取決于第一個(gè)數(shù)的符號(hào),如果是正的,結(jié)果就是正的;否則就是負(fù)的。

> 3.5 % 1
0.5
> -3.5 % 1
-0.5

然后,我們也可以檢查0,這其實(shí)不是一個(gè)問題。但問題是:這個(gè)方法對(duì)非數(shù)字也會(huì)返回true,因?yàn)?% 會(huì)將它轉(zhuǎn)換成數(shù)字:

> isInteger('')
true
> isInteger('33')
true
> isInteger(false)
true
> isInteger(true)
true

可以通過很簡(jiǎn)單的類型檢查來解決:

function isInteger(x) {
  return (typeof x === 'number') && (x % 1 === 0);
}

通過Math.round() 如果一個(gè)數(shù)字取整以后還跟之前的值一樣,那么它就是整數(shù)。在JavaScript中可以通過Math.round()來檢查:

function isInteger(x) {
  return Math.round(x) === x;
}

這個(gè)方法也不錯(cuò)

> isInteger(17)
true
> isInteger(17.13)
false

它也可以判斷非數(shù)字,因?yàn)镸ath.round()總是返回?cái)?shù)字,并且===只有當(dāng)類型一樣時(shí)才返回true.

> isInteger('')
false

如果你想讓代碼更清晰一點(diǎn),你可以添加類型檢查(就是我們?cè)谥鞍姹咀龅模?。另外,Math.floor()和Math.ceil()可以像Math.round()一樣工作。 通過位操作檢查 位操作符提供另外一種“取整”的方法:

function isInteger(x) {
  return (x | 0) === x;
}

這個(gè)解決方案(跟其它位運(yùn)算一樣)有一個(gè)缺陷:它無法處理超過32位的數(shù)字。

> isInteger(Math.pow(2, 32))
false

通過parseInt()檢查 parseInt()也提供了跟Math.round()類似將數(shù)字轉(zhuǎn)換成整型的方法。 讓我們看看這個(gè)方法為什么不錯(cuò)。

function isInteger(x) {
  return parseInt(x, 10) === x;
}

像Math.round()解決方案一樣,它也可以處理非數(shù)字的情況,但是它也不能正確地處理所有的整型數(shù)字:

> isInteger(1000000000000000000000)
false

為什么?parseInt()在解析整數(shù)之前強(qiáng)迫將第一個(gè)參數(shù)解析成字符串。因此使用這種方法將數(shù)字轉(zhuǎn)換成整型不是一個(gè)好的選擇。

> parseInt(1000000000000000000000, 10)
1
> String(1000000000000000000000)
'1e+21'

就像上面那樣,parseInt()在解析'1e+21'時(shí)在1處停止處理了,所以它才會(huì)返回1. ECMAScript 6 對(duì)于Math.round()扔補(bǔ)充,ES6提供了另外一個(gè)將數(shù)字轉(zhuǎn)換成整型的方法:Math.trunc()。該函數(shù)會(huì)移除數(shù)字的小數(shù)部分。

> Math.trunc(4.1)
4
> Math.trunc(4.9)
4
> Math.trunc(-4.1)
-4
> Math.trunc(-4.9)
-4

此外,ECMAScript6不需要去處理檢查整數(shù)那些瑣碎的任務(wù),因?yàn)樗鼛в幸粋€(gè)內(nèi)置函數(shù) Number.isInteger()。

相關(guān)文章

  • 迅速了解一下ES10中Object.fromEntries的用法使用

    迅速了解一下ES10中Object.fromEntries的用法使用

    這篇文章主要介紹了迅速了解一下ES10中Object.fromEntries的用法使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-03-03
  • bootstrap table實(shí)現(xiàn)合并單元格效果

    bootstrap table實(shí)現(xiàn)合并單元格效果

    這篇文章主要為大家詳細(xì)介紹了bootstrap table實(shí)現(xiàn)合并單元格效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Javascript blur與click沖突解決辦法

    Javascript blur與click沖突解決辦法

    這篇文章主要介紹了Javascript blur與click沖突解決辦法的相關(guān)資料,在開發(fā)過程中經(jīng)常會(huì)遇到blur與click 沖突的情況,這里舉了幾個(gè)例子,和解決辦法,需要的朋友可以參考下
    2017-01-01
  • javascript是怎么繼承的介紹

    javascript是怎么繼承的介紹

    關(guān)于js中的繼承,網(wǎng)上有很多文章了,在這里我寫出自己對(duì)js中的繼承的理解
    2012-01-01
  • JavaScript設(shè)計(jì)模式中的橋接和中介者模式

    JavaScript設(shè)計(jì)模式中的橋接和中介者模式

    這篇文章主要介紹了JavaScript設(shè)計(jì)模式中的橋接和中介者模式,橋接設(shè)計(jì)模式是一種偏向于組合的設(shè)計(jì)模式,而非繼承的設(shè)計(jì)模式,實(shí)現(xiàn)的細(xì)節(jié)從一個(gè)模塊推送給另一個(gè)具有單獨(dú)模塊的對(duì)象,而中介者設(shè)計(jì)模式是指通過一個(gè)中介者對(duì)象封裝一系列的對(duì)象交互
    2022-06-06
  • Javascript?中AJAX的圖書管理代碼實(shí)例詳解

    Javascript?中AJAX的圖書管理代碼實(shí)例詳解

    這篇文章主要為大家詳細(xì)介紹了AJAX的圖書管理代碼實(shí)例,使用數(shù)據(jù)庫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 循環(huán) vs 遞歸淺談

    循環(huán) vs 遞歸淺談

    本文代碼使用 JavaScript。 一些同學(xué)對(duì)遞歸的理解還停留在“是一種求階乘比循環(huán)低效的方法”。但其實(shí)遞歸和循環(huán)處理的問題是不同。拿“遍歷數(shù)組”這個(gè)問題來說:循環(huán)適合同一維度(單層長度不限)上的遍歷,而遞歸則適合跨維度(層數(shù)不限)的遍歷。
    2013-02-02
  • js 固定懸浮效果實(shí)現(xiàn)思路代碼

    js 固定懸浮效果實(shí)現(xiàn)思路代碼

    懸浮效果想必大家都不陌生吧,本文為大家介紹下使用js固定懸浮的實(shí)現(xiàn)思路及代碼,感興趣的朋友可以參考下
    2013-08-08
  • JS中的substring和substr函數(shù)的區(qū)別說明

    JS中的substring和substr函數(shù)的區(qū)別說明

    stringObject.substring(start,stop)與substr(start,length)有什么區(qū)別,下面為大家詳細(xì)介紹下,感興趣的朋友可以參考下哈
    2013-05-05
  • JavaScript中檢測(cè)變量是否存在遇到的一些問題

    JavaScript中檢測(cè)變量是否存在遇到的一些問題

    要檢測(cè)某一變量是否存在,雖然簡(jiǎn)單但是也要細(xì)心,下面整理了幾點(diǎn),遇到類似問題的朋友可以參考下
    2013-11-11

最新評(píng)論