三元运算符与或运算

三元运算符是编写简单(有时不那么简单)条件语句的快速方法,如下所示:

x > 100 ? "Above 100" : "Below 100";
x > 100 ? (x > 200 ? "Above 200" : "Between 100-200") : "Below 100";

但有时使用三元运算符处理也会很复杂。相反,我们可以使用’与’&&和’或’|| 逻辑运算符以更简洁的方式书写表达式。这通常被称为“短路”或“短路运算”。

它是怎么工作的

假设我们只想返回两个或多个选项中的一个。

使用&&将返回第一个条件为的值。如果每个操作数的计算值都为true,则返回最后一个计算过的表达式。

​​​​​​​​​​​​​​let one = 1,
    two = 2, 
    three = 3;
    console.log(one && two && three); // Result: 3
    console.log(0 && null); // Result: 0

使用||将返回第一个条件为的值。如果每个操作数的计算结果都为false,则返回最后一个计算过的表达式。

​​​​​​​let one = 1, 
    two = 2, 
    three = 3;
    console.log(one || two || three); // Result: 1
    console.log(0 || null); // Result: null

例一

假设我们想返回一个变量的长度,但是我们不知道变量的类型。

我们可以使用if/else语句来检查foo是可接受的类型,但是这可能会变得非常冗长。或运行可以帮助我们简化操作:

​​​​​​​​​​​​​​return (foo || []).length;

如果变量foo是 true,它将被返回。否则,将返回空数组的长度:0

例二

你是否遇到过访问嵌套对象属性的问题?你可能不知道对象或其中一个子属性是否存在,这可能会导致令人沮丧的错误。

假设我们想在this.state中访问一个名为data的属性,但是在我们的程序成功返回一个获取请求之前,data 是未定义的。

根据我们使用它的位置,调用this.state.data可能会阻止我们的应用程序运行。为了解决这个问题,我们可以将其做进一步的判断:

​​​​​​​if (this.state.data) { 
    return this.state.data;
} else { 
    return "Fetching Data";
}

但这似乎很重复。‘或' 运算符提供了更简洁的解决方案:

​​​​​​​return this.state.data || "Fetching Data";

一个新特性: Optional Chaining

过去在 Object 属性链的调用中,很容易因为某个属性不存在而导致之后出现Cannot read property xxx of undefined的错误。

那 optional chaining 就是添加了?.这么个操作符,它会先判断前面的值,如果是 null 或 undefined,就结束调用、返回 undefined

例如,我们可以将上面的示例重构为 this.state.data?.()。或者,如果我们主要关注state 是否已定义,我们可以返回this.state?.data

该提案目前处于第 1 阶段,作为一项实验性功能。你可以在这里阅读它,你现在可以通过 Babel 使用你的 JavaScript,将 @babel/plugin-proposal-optional-chaining添加到你的.babelrc文件中。

猜你喜欢

转载自blog.csdn.net/qq_42363090/article/details/108467812