【问题标题】:What is the meaning of "a|=b" in JS/TS if it's valid to begin with?JS / TS中的“a | = b”如果开始有效,是什么意思?
【发布时间】:2020-04-12 07:36:17
【问题描述】:

当我看到这个表情时

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 在相反的情况下,因为它返回零)。当然,这是有一定逻辑的。

我无法解释为什么会发生这种情况,这让我很困扰。

所有示例都是在 Chrome 的控制台中执行的,我不确定是否由于我在浏览器中的操作或再现而发生了从 booleannumber 的转换,或者可能还有别的东西。

【问题讨论】:

标签: javascript typescript boolean variable-types


【解决方案1】:

| 是按位或运算。 || 是逻辑或运算。 |= 是复合按位或赋值运算符。 JavaScript 中没有与 || 等效的 ||= 运算符(尽管有 talk 添加它),因此您不能使用 ||(或 &&)进行重构,至少现在是这样. (嗯......如果你使用 Babel,你可以,因为该提案有 a plugin。)

【讨论】:

  • 大多数按位运算都可以与布尔值一起使用。尽管Boolean(a ^ b) 会按位进行转换,但我还是经常使用带有布尔值的XOR,尽管if (a ^ b) 也可以,因为无论如何它都会是真/假。
  • @VLAZ - 是的,了解差异很重要: 1. 结果是一个数字(可以转换回布尔值)。 2. 两个操作数总是被求值。 3. 结果与任一操作数都不相同(而|| 取其一个操作数的值)。但是,是的,正如你所说,在很多情况下都可以。 (我想可能有4,但我还是有点困... :-))
猜你喜欢
  • 2017-02-02
  • 2013-12-16
  • 2014-01-16
  • 1970-01-01
  • 2014-02-09
  • 2012-06-14
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多