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

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.kler.cn/news/341855.html

相关文章:

  • 网络安全社区和论坛
  • Java入门:10.Java中的包
  • 使用Java调用OpenAI API并解析响应:详细教程
  • 【含文档】基于Springboot+Android的校园论坛系统(含源码+数据库+lw)
  • LeetCode讲解篇之1043. 分隔数组以得到最大和
  • 服装生产管理的现代化:SpringBoot框架
  • 《C++职场中设计模式的学习与应用:开启高效编程之旅》
  • Leetcode.20 有效的括号
  • OpenStreetMap介绍
  • 研发中台拆分之路:深度剖析、心得总结与经验分享
  • Linux_进程概念详解
  • MySql外键约束
  • 舞韵流转:SpringBoot实现古典舞在线交流新体验
  • Pytest测试用例生命周期管理-Fixture
  • VBA即用型代码手册:将工作表复制到已关闭的工作簿
  • YOLO11改进|SPPF篇|引入YOLOv9提出的SPPELAN模块
  • uni-app之旅-day04-商品列表
  • 旅游管理智能化转型:SpringBoot系统设计与实现
  • 基于证书的身份验证方式及示例
  • Linux-控制脚本