我正在测试变量是否为整数。 x ^ 0 === x
是提议的解决方案之一,但是当我在Chrome控制台中尝试使用时,在codepen.io或此处,它会返回x
。这是为什么?
function isInteger(x) {
console.log(x ^ 0 === x);
}
isInteger(5);
isInteger(124.124)
isInteger(0);

答案 0 :(得分:5)
由于您错过了在()
附近添加x^0
而错误地评估了您的情况:
function isInteger(x) {
console.log((x ^ 0) === x);
}
isInteger(5);
isInteger(124.124)
isInteger(0);
答案 1 :(得分:3)
虽然messerbill的答案解释了这个问题,但还有另一个问题。这不是一个好用的方法:
function isInteger(x) {
console.log((x ^ 0) === x);
}
isInteger(281474976710656);
原因是因为bitwise operators将操作数强制为32位。最好使用它:
function isInteger(x) {
console.log((x % 1) === 0);
}
isInteger(5);
isInteger(124.124)
isInteger(0);
isInteger(281474976710656);
答案 2 :(得分:0)
作为所提供答案的补充,与该问题相关的概念是" operator precedence"。当我在JS中遇到这类问题时,该页面就是我要去的地方(不同的语言可能有不同的运算符优先级,例如js和php中的取幂运算符**
。
所以从答案中的例子来看:
(x ^ 0) === x
需要括号
,而
x % 1 === 0
没有。