• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

在JavaScript中判断整型的N种方法_js

javascript 程旭媛 7年前 (2018-06-21) 155次浏览 已收录 0个评论

  整数类型(Integer)在JavaScript经常会导致一些奇怪的问题。在ECMAScript的规范中,他们只存在于概念中:

所有的数字都是浮点数,并且整数只是没有一组没有小数的数字。

  在这篇博客中,我会解释如何去检查某个值是否为整型。

  ECMAScript 5

  在ES5中有很多方法你可以使用。有时侯,你可能想用自己的方法:一个isInteger(x)的函数,如果是整型返回true,否则返回false.

  让我们看看一些例子。

  通过余数检查

  你可以使用余数运算(%),将一个数字按1求余,看看余数是不是0。

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

  我喜欢这个方法,因为它非常简单,而且有效。

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

  在操作余数运算时你得小心一点,因为结果取决于第一个数的符号,如果是正的,结果就是正的;否则就是负的。

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

  然后,我们也可以检查0,这其实不是一个问题。但问题是:这个方法对非数字也会返回true,因为 % 会将它转换成数字:

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

  可以通过很简单的类型检查来解决:

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

  通过Math.round()

  如果一个数字取整以后还跟之前的值一样,那么它就是整数。在javaScript中可以通过Math.round()来检查:

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

  这个方法也不错

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

  它也可以判断非数字,因为Math.round()总是返回数字,并且===只有当类型一样时才返回true.

 > isInteger('') false

  如果你想让代码更清晰一点,你可以添加类型检查(就是我们在之前版本做的)。另外,Math.floor()和Math.ceil()可以像Math.round()一样工作。

  通过位操作检查

  位操作符提供另外一种“取整”的方法:

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

  这个解决方案(跟其它位运算一样)有一个缺陷:它无法处理超过32位的数字。

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

  通过parseInt()检查

  parseInt()也提供了跟Math.round()类似将数字转换成整型的方法。

  让我们看看这个方法为什么不错。

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

  像Math.round()解决方案一样,它也可以处理非数字的情况,但是它也不能正确地处理所有的整型数字:

 > isInteger(1000000000000000000000) false

  为什么?parseInt()在解析整数之前强迫将第一个参数解析成字符串。因此使用这种方法将数字转换成整型不是一个好的选择。

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

  就像上面那样,parseInt()在解析'1e+21'时在1处停止处理了,所以它才会返回1.

  ECMAScript 6

  对于Math.round()扔补充,ES6提供了另外一个将数字转换成整型的方法:Math.trunc()。该函数会移除数字的小数部分。

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

  此外,ECMAScript6不需要去处理检查整数那些琐碎的任务,因为它带有一个内置函数 Number.isInteger()。

欢迎大家阅读《在JavaScript中判断整型的N种方法_js,跪求各位点评,若觉得好的话请收藏本文,by 搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:在JavaScript中判断整型的N种方法_js

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址