还有更好的选择吗?
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;
}
答案 0 :(得分:1)
您可以改用Number.isInteger。看看polyfill:
Number.isInteger = Number.isInteger || function(value) {
return typeof value === "number" &&
isFinite(value) &&
Math.floor(value) === value;
};
修改:还有isNaN和Number.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;
}