可不可以使用 num == parseInt(num) 来判断 num 可解析为整数?
发布于 1 年前 作者 daGaiGuanYu 3686 次浏览 来自 问答

哈哈,我真是太容易遇到这种困扰了,但是真的不想因为判断个整数,引入一个大库。

需求是这样的,从 url 里取出一个参数 num,我要判断 num 是否为正整数:

function is_int(value_raw) {
  const value = parseInt(value_raw)
  return value == value_raw ? value : false
}

如果返回 false,那么 value_raw 就不是整数
否则是整数,且返回值就是对应的整数类型的值

看起来比较简洁,但是我担心使用 parseInt(value_str) == value 不够严谨
因此请教一下友友们,不知道有没有什么反例

我已经测试了这些情况:

parseInt('1') == '1' // true
parseInt('-1') == '-1' // true
parseInt(NaN) == NaN // false。没错,NaN == NaN 是 false
parseInt(1.1) == 1.1 // false
parseInt('1.1') == '1.1' // false
parseInt(true) == true // false
parseInt(false) == false // false
parseInt('true') == 'true' // false
parseInt('false') == 'false' // false

但是 '1.0' 竟然也是 true,不过需求是判断 可解析为整数,所以也不算反例:

'1.0' == parseInt('1.0') // true 
3 回复

num === ~~num

正则匹配

试试 Number.isInteger(+input)

回到顶部