如果参数是整数,这是一种有效的检查类型吗?

时间:2015-11-14 18:37:53

标签: javascript

还有更好的选择吗?

function isInteger(x) {
  // check if argument is a valid number and not NaN
  if ((typeof x !== 'number') || (x !== x)) throw Error('Not a valid number')
  // double binary inverse (inspired by `!!` operation)
  return x === ~~x;
}

3 个答案:

答案 0 :(得分:1)

您可以改用Number.isInteger。看看polyfill:

Number.isInteger = Number.isInteger || function(value) {
    return typeof value === "number" && 
           isFinite(value) && 
           Math.floor(value) === value;
};

修改:还有isNaNNumber.isNaN个功能。请勿使用x !== x

答案 1 :(得分:1)

不完全。

JS数字是64位浮点数,但按位运算符仅支持32位整数。然后,他们截断数字。

这就是为什么你可以用它们来检查一个数字是否是一个整数,例如

x === ~~x;
x === (x|0);
x === (x&-1);

但是,对于大于2 31 -1或低于-2 32 的整数,它们不会起作用:

var x = Math.pow(2, 31);
x; // 2147483648
Number.isInteger(x); // true
x === ~~x; // false

答案 2 :(得分:0)

是的,该函数完全按预期工作,它检查通过函数调用发送的变量是否真的是一个整数,但你不需要检查是否(x不等于x),你可以省略它(x!== x)

function isInteger(x) {
  if (typeof x !== 'number') throw Error('Not a valid number')
  return x === ~~x;
}