为什么(x ^ 0 === x)输出x而不是true / false?

时间:2018-03-01 16:36:44

标签: javascript math

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



function isInteger(x) {
  console.log(x ^ 0 === x);
}

isInteger(5);
isInteger(124.124)
isInteger(0);




3 个答案:

答案 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

没有。