我在做一个关于如何测试变量是否为整数的练习。其中一个提供的解决方案是x ^ 0 === x
,然而当我在Chrome浏览器的控制台、codepen.io或者这里进行尝试时,它返回的是x
。为什么会这样呢?
function isInteger(x) {
console.log(x ^ 0 === x);
}
isInteger(5);
isInteger(124.124)
isInteger(0);
我在做一个关于如何测试变量是否为整数的练习。其中一个提供的解决方案是x ^ 0 === x
,然而当我在Chrome浏览器的控制台、codepen.io或者这里进行尝试时,它返回的是x
。为什么会这样呢?
function isInteger(x) {
console.log(x ^ 0 === x);
}
isInteger(5);
isInteger(124.124)
isInteger(0);
由于您未在x^0
周围添加()
,因此导致您的条件评估错误:
function isInteger(x) {
console.log((x ^ 0) === x);
}
isInteger(5);
isInteger(124.124)
isInteger(0);
虽然messerbill的回答解释了问题,但还有另一个问题。这不是一个好的使用方法:
function isInteger(x) {
console.log((x ^ 0) === x);
}
isInteger(281474976710656);
function isInteger(x) {
console.log((x % 1) === 0);
}
isInteger(5);
isInteger(124.124)
isInteger(0);
isInteger(281474976710656);
function isInteger(x) { return (typeof x === 'number') && (x % 1 === 0); }
,尽管我已经假设我们只会向函数传递数字输入。看来一切都不确定了。 - Patrick Roberts
Number.isInteger()
是在 ECMAScript 6 中引入的。不再需要重新发明轮子了。 - Patrick Roberts