JavaScript 中布尔值的求幂运算符?

Exponentiation operator for Boolean in JavaScript?

参考thisexponentiation operator returns第一个操作数乘第二个操作数的结果,如Python中的幂运算符,是一部分ECMAScript 2016 (ES7) 提案。

我们知道 Boolean 和 Python 中的 exponentiation operator 的结果如下:

>>> False ** False == True
True
>>> False ** True == False
True
>>> True ** False == True
True
>>> True ** True == True
True

我想知道 Boolean 是否可以用在 exponentiation operator 中?如果是这样,在 Python?

中是否会出现与上面相同的行为?

我不确定您期望什么样的答案。如果您查看 proposal,您会注意到两个操作数都首先转换为数字。这意味着 false ** false 等同于 0 ** 0.

是的,您可以将运算符应用于布尔值。就像所有其他运算符一样,值会转换为运算符期望的类型。

结果总是一个数字。

但是,当然如果你使用松散比较,那么如果取幂的结果是1,它会松散等于true,如果它是 0,它将 松散地 等于 false.

Yes

console.log(false ** false == true);  // true
console.log(false ** true == false);  // true
console.log(true ** false == true);  // true
console.log(true ** true == true);  // true

如果你使用 ===,所有这些都将是 false,因为 0false 不同,1 也不相同作为 true.