为什么按位异或在 JavaScript 的 if 语句中不起作用?

Why doesn't bitwise xor work in an if statement of JavaScript?

有人可以解释这种行为吗?

https://jsfiddle.net/td1qtyxL/9/

function checkSignsWeird(a,b){
    var output = "";
    if(a^b < 0){
        output = "The "+a+" and "+b+" have DIFFERENT signs.";
    }else{
        output = "The "+a+" and "+b+" have the SAME sign.";
    }
    console.log(output);
}

基本上除非a^b存储在一个变量中(或用括号括起来),否则它不起作用。

checkSignsWeird(-50,40);
checkSignsWeird(60,70);

两者产生相同的结果。

艾米我做错了什么或者这是一个错误?当它在 if 子句中或在其他地方时,按位的工作方式是否不同?我不经常使用按位,只是觉得这很优雅,跟进这里的答案:Check if two integers have the same sign

"Less Than"(<)的优先级高于按位异或(^):https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table

您需要用括号将运算分组。

按位运算符的优先级低于比较运算符。参见 Operator precedence

话虽这么说,但不要编写聪明的代码。

function haveSameSign(a, b) {
    return (a >= 0 && b >= 0) || (a < 0 && b < 0);
}