机构档案
  • 机构级别:普通会员
  • 信用等级:

在线交谈:点击这里给我发消息

咨询热线:029-62258374

学校评价(我要提问/点评)

  • 学校被点评:0
  • 好评(0%)
  • 中评(0%)
  • 差评(0%)

资料认证

    未通过身份证认证 未通过身份证认证

    未通过办学许可认证 未通过办学许可认证

  • 学校浏览人次:
  • 加盟时间:2017年03月10日
新闻动态

西安尚学堂在JavaScript中判断值是否为整型

发布者:西安尚学堂 发布时间:2017-03-16 来源:西安尚学堂

整数类型(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()。