国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

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

2019-11-20 14:26:49
字體:
供稿:網(wǎng)友

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

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

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

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

讓我們看看一些例子。

通過余數(shù)檢查

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

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

我喜歡這個方法,因為它非常簡單,而且有效。

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

在操作余數(shù)運算時你得小心一點,因為結(jié)果取決于第一個數(shù)的符號,如果是正的,結(jié)果就是正的;否則就是負(fù)的。

> 3.5 % 10.5> -3.5 % 1-0.5

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

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

可以通過很簡單的類型檢查來解決:

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

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

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

這個方法也不錯

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

它也可以判斷非數(shù)字,因為Math.round()總是返回數(shù)字,并且===只有當(dāng)類型一樣時才返回true.

> isInteger('')false

如果你想讓代碼更清晰一點,你可以添加類型檢查(就是我們在之前版本做的)。另外,Math.floor()和Math.ceil()可以像Math.round()一樣工作。 通過位操作檢查 位操作符提供另外一種“取整”的方法:

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

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

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

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

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

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

> isInteger(1000000000000000000000)false

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

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

就像上面那樣,parseInt()在解析'1e+21'時在1處停止處理了,所以它才會返回1. ECMAScript 6 對于Math.round()扔補充,ES6提供了另外一個將數(shù)字轉(zhuǎn)換成整型的方法:Math.trunc()。該函數(shù)會移除數(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ù),因為它帶有一個內(nèi)置函數(shù) Number.isInteger()。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 林西县| 镇沅| 鸡东县| 乌鲁木齐县| 肥东县| 福海县| 西充县| 高尔夫| 将乐县| 布尔津县| 大埔县| 蚌埠市| 合江县| 大名县| 泰来县| 万源市| 深泽县| 海兴县| 商都县| 北宁市| 南涧| 岐山县| 休宁县| 陆丰市| 元阳县| 兴城市| 崇明县| 衡阳县| 兴安县| 五家渠市| 武冈市| 黑山县| 彭水| 修文县| 乡宁县| 文山县| 佛教| 平原县| 达日县| 大连市| 铜陵市|