当前位置: 首页 > news >正文

js短路求值

短路求值(short-circuit evaluation)是指在逻辑运算中,如果前面的表达式已经能够确定整个表达式的结果,后面的表达式就不会被执行。短路求值常见于逻辑运算符 &&(与)和 ||(或)中。

下面是几个关于短路求值的例子:

1. &&(逻辑与)的短路求值

&& 表达式会在第一个操作数为 false 时停止计算,因为无论第二个操作数是什么,结果都一定是 false

// 示例 1:前面的表达式为 false,后面的表达式不会执行
const a = 0;
const result1 = a && (10 / a); // 0
console.log(result1); // 输出 0,因为 a 为 0,整个表达式短路,10 / a 不会被执行// 示例 2:前面的表达式为 true,继续执行后面的表达式
const b = 5;
const result2 = b && (b + 10); // 15
console.log(result2); // 输出 15,因为 b 为 5,所以继续执行 b + 10

2. ||(逻辑或)的短路求值

|| 表达式会在第一个操作数为 true 时停止计算,因为无论第二个操作数是什么,结果都一定是 true

// 示例 1:前面的表达式为 true,后面的表达式不会执行
const c = 5;
const result3 = c || (10 / c); // 5
console.log(result3); // 输出 5,因为 c 为 5(true),整个表达式短路,10 / c 不会被执行// 示例 2:前面的表达式为 false,继续执行后面的表达式
const d = 0;
const result4 = d || (d + 10); // 10
console.log(result4); // 输出 10,因为 d 为 0(false),所以继续执行 d + 10

3. 结合对象展开的例子

可以利用短路求值来有条件地向对象中添加属性:

const addAge = true;
const person = {name: 'Alice',...(addAge && { age: 25 })
};
console.log(person); // 输出 { name: 'Alice', age: 25 }const addAge2 = false;
const person2 = {name: 'Bob',...(addAge2 && { age: 30 })
};
console.log(person2); // 输出 { name: 'Bob' }

4. 函数调用中的短路求值

短路求值还可以用于控制函数是否执行:

function greet() {console.log('Hello, world!');
}// 当 condition 为 true 时调用函数
const condition = true;
condition && greet(); // 输出 "Hello, world!"// 当 condition 为 false 时,不调用函数
const condition2 = false;
condition2 && greet(); // 不会输出任何东西

5. 设置默认值

可以用短路求值来设置默认值:

const inputValue = null;
const defaultValue = '默认值';
const result5 = inputValue || defaultValue;
console.log(result5); // 输出 "默认值"

如果 inputValuenullundefined0false"",那么 result5 会使用 defaultValue 作为默认值。

http://www.lryc.cn/news/457125.html

相关文章:

  • react 知识点汇总(非常全面)
  • 如何加密重要U盘?U盘怎么加密保护?
  • js编写一个中奖程序
  • Mybatis-plus的基础用法
  • 【网络篇】计算机网络——应用层详述(笔记)
  • 力扣10.9
  • @RequestMapping指定请求方式的用法
  • 卷积神经网络细节问题及知识点
  • 【图论】(一)图论理论基础与岛屿问题
  • PhotoMaker部署文档
  • 双十一买什么最划算?2024年双十一选购攻略汇总!
  • Oracle架构之物理存储之审计文件
  • DAY6 面向对象
  • 代码随想录 (三)—— 哈希表部分刷题
  • 搜维尔科技:使用 SenseGlove Nova 2 远程操作机械手,实现了对鸡蛋的精细操控
  • Mybatis是什么?优缺点分别有哪些?
  • opencascade鼠标拖拽框选功能
  • docker 部署 postgres
  • 【重学 MySQL】五十、添加数据
  • 硬货!Zabbix监控AIX系统服务案例
  • python常见面试题
  • 低功耗接地故障控制器D4145
  • SpringMVC的处理流程
  • SpringBoot统一日志框架
  • vue-live2d看板娘集成方案设计使用教程
  • springboot接口如何支持400并发量
  • Verilog中的: `+:` 和 `-:`
  • 为何四次挥手要等待2MSL
  • C++——模拟实现list
  • React中useState、useReducer与useRef