美文网首页
短路求值(避免复杂的三目运算)

短路求值(避免复杂的三目运算)

作者: 小棋子js | 来源:发表于2020-03-03 10:57 被阅读0次

使用三元运算符可以很快地写出条件语句,例如:

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

但有时候三元运算符仍然很复杂,我们可以使用逻辑运算符 && 和||来替代,让代码更简洁一些。这种技巧通常被称为“短路求值”。

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

使用 && 可以返回第一个 false。如果所有操作数的值都是 true,将返回最后一个表达式的值。
let one = 1, two = 2, three = 3;
console.log(one && two && three); // Result: 3
console.log(0 && null); // Result: 0

使用||可以返回第一个 true。如果所有操作数的值都是 false,将返回最后一个表达式的值。
let one = 1, two = 2, three = 3;
console.log(one || two || three); // Result: 1
console.log(0 || null); // Result: null

示例 1

假设我们想要返回一个变量的 length,但又不知道变量的类型。
我们可以使用 if/else 来检查 foo 是否是一个可接受的类型,但这样会让代码变得很长。这个时候可以使用短路求值:
return (foo || []).length;
对于上述两种情况,如果变量 foo 具有 length 属性,这个属性的值将被返回,否则将返回 0。

示例 2

你是否曾经在访问嵌套对象属性时遇到过问题?你可能不知道对象或某个子属性是否存在,所以经常会碰到让你头疼的错误。
假设我们想要访问 this.state 中的一个叫作 data 的属性,但 data 却是 undefined 的。在某些情况下调用 this.state.data 会导致 App 无法运行。为了解决这个问题,我们可以使用条件语句:

if (this.state.data) {
return this.state.data;
} else {
return 'Fetching Data';
}
但这样似乎有点啰嗦,而||提供了更简洁的解决方案:
return (this.state.data || 'Fetching Data');

相关文章

  • 短路求值(避免复杂的三目运算)

    使用三元运算符可以很快地写出条件语句,例如: 但有时候三元运算符仍然很复杂,我们可以使用逻辑运算符 && 和||来...

  • JavaScript 短路求值(short-circuit ev

    短路求值 是使用 三元运算、&& 和 || 快速求值的方法。使用短路求值,在一行代码内表达出简单的条件赋值 (if...

  • JavaScript学习一

    条件运算符(三元运算符,也叫三目运算) 语法: 条件表达式?语句1: 执行流程: 首先对条件表达式进行求值如果该值...

  • 2018-08-02

    lua语言中使用的小技巧 lua语言虽然没有C/C++语言式的三目运算,但是我们可以通过它短路式的逻辑方式实现三目...

  • 21-三目运算符

        在进行程序开发的时候三目运算符使用的非常多,而且合理的利用三目运算可以避免一些大范围的程序编写。三目是一种...

  • 2018-10-06 js中短路运算出现的一次大意外!

    在之前的海外api项目中,对数组元素赋值时,使用的都是如下方式: 在这里使用js的短路运算构成了类似于三目运算的效...

  • 《Java核心技术卷一》——3.5.7位运算符

    &和|运算符不采用“短路”方式来求值,也就是说,得到的计算结果之前两个操作数都需要计算。 另外,>>表示左移,<<...

  • 短路运算(重点)

    短路运算 与运算 逻辑或运算

  • react条件渲染

    条件渲染的几种形式 &&短路运算符 总结:根据组件代码的复杂程度,可以依次选择。

  • Java 长短路逻辑运算

    长路与运算 & 短路与运算 && 长路或运算 | 短路或运算 || 长路与运算 & 运行如下程序: 返回结果为: ...

网友评论

      本文标题:短路求值(避免复杂的三目运算)

      本文链接:https://www.haomeiwen.com/subject/saqqlhtx.html