如果开头有效,JS/TS 中的 "a|=b" 是什么意思?

What is the meaning of "a|=b" in JS/TS if it's valid to begin with?

当我看到表达式

let a : number = 3;
a = a + 5;

我马上重构为

let a : number = 3;
a += 5;

在这两种情况下,结果都是 a===8(为了清楚起见,我添加了变量类型)。但是,相同模式的布尔表达式

let b : boolean = false;
b = b || true;

不等同于

let b : boolean = false;
b |= true;

因为它产生了一个数字。现在,该数字与 true 相关,因为它是非零的(相反,在相反的情况下,它对应于 false,因为它 returns 零)。所以这当然有一定的逻辑。

这让我很烦恼,我无法解释为什么会这样。

所有示例都是在 Chrome 的控制台中执行的,我不确定是否从 boolean[= 转换为 number 35=] 是由于我在浏览器中的操作或再现或其他原因造成的。

| 是按位或运算。 || 是逻辑或运算。 |= 是复合按位或赋值运算符。 JavaScript 中的 || 没有等效的 ||= 运算符(尽管该提案有 talk of adding it) and, so you can't do that refactoring with || (or &&), at least for now. (Well...you can if you use Babel, as there's a plugin。)