为什么打字稿&&返回字符串值而不是布尔值

时间:2020-04-29 16:00:32

标签: typescript

为什么此代码返回uri字符串值而不是布尔值?

public getContext(): string | undefined {    
    return this.workspace && this.workspace.uri;
  }

这是示例https://stackblitz.com/edit/typescript-f75jhs

1 个答案:

答案 0 :(得分:2)

之所以会这样,是因为运算符&&||短路了(您可以详细了解here

这对您上面的代码意味着什么?

让我尝试以一系列执行的操作来解释它:

  1. 从布尔运算符&&的左边开始计算表达式,该表达式为this.workspace;

  2. 如果this.workspace是真实的,则继续评估;

  3. 从布尔运算符&&(即this.workspace.uri)的右边评估表达式;

  4. 如果this.workspace.uri是真实的,则整个表达式都是真实的,我们可以返回运算符右侧的内容(在您的情况下为this.workspace.uri;

但是,如果左侧的表达式为false且您在此处使用布尔值AND,则在右侧评估其他表达式是没有意义的,因为整个AND表达式无论如何都是FALSE。因此,我们可以“短路”。