0

这是一个足够好的“是整数”检查吗:

function isint( o ) {
    return Number( o ) === parseInt( o );
}

我想得到true,比如 12、13、'14'、'-1'、Number.MAX_VALUE,(不关心舍入问题)和false浮点数,以及其他任何东西。

这也可能非常接近:

function isint( o ) {
    try {
        return eval( o ) === parseInt( Number( o ), 10 );
    } catch (e) {}
        return false
}

另外一个问题: Number.MAX_VALUE 是浮动的吗?

4

1 回答 1

1

一些与您的代码不同的示例:

'0x12' 因为Number()parseInt()都尝试对数字进行 JavaScript 样式解析 - 在这种情况下将数字解析为十六进制,所以这会失败。(但也许你对此没意见)。将 10 作为基数传递给 parseInt 的简单更改将修复这部分代码。

'1.0000000000000001' 这会出错,因为 JavaScript 数字无法存储足够的有效数字来表示这个数字。

我建议做两项检查,一项检查数字,一项检查字符串。对于数字,您可以取floor()以查看四舍五入时数字是否发生变化。对于字符串,使用RegExp检查字符串是否仅包含“-”和数字。就像是:

function isint(o) {
  if (typeof o === 'number') {
    // o is an int if rounding down doesn't change it.
    return Math.floor(o) === o;
  }
  else if (typeof o === 'string' &&
           /^-?\d+$/.test(o)) { // match '-' (optional) followed by 1 or more digits
    // o is an int if parsing the string, and toString()ing it gets you the same value 
    var num = Number(o);
    return num.toString() === o;
  }
  return false;
}

尝试一下:

[12, 13, '14', '-1', '0x12', '1.0000000000000001'].forEach(function(x) {
  console.log(x + ' isInt = ' + isint(x));
});

印刷:

12 isInt = true
13 isInt = true
14 isInt = true
-1 isInt = true
0x12 isInt = false
1.0000000000000001 isInt = false
于 2013-09-16T05:40:04.757 回答