jstips 详解 JavaScript 短路求值:用  与 || 写出更简洁健壮的代码
教程【免费下载链接】jstipsThis is about useful JS tips!项目地址https://gitcode.com/gh_mirrors/js/jstips点击查看免费下载短路求值Short-Circuit Evaluation是 JavaScript 中与||两个逻辑运算符最实用的行为特性表达式的结果一旦能被第一个操作数确定第二个操作数就完全不会被执行。本指南以 jstips 第 27 期_posts/en/javascript/2016-01-27-short-circuit-evaluation-in-js.md为骨架结合仓库内多个相关 tip系统讲解如何用替代if、用||设置默认值、安全访问可能为undefined的对象属性并深入 truthy/falsy、回调守卫与函数式循环等进阶场景。读完你将掌握一套可立即上手的简洁条件表达式写法并理解其底层求值规则与边界陷阱。一、什么是短路求值短路求值的核心规则只有一条只有当第一个操作数的值不足以决定整个逻辑表达式的结果时第二个操作数才会被求值执行。具体到两个运算符对于逻辑与如果第一个操作数求值为false那么无论第二个操作数是什么整个表达式的结果都必然是false因此第二个操作数不会被求值对于逻辑或||如果第一个操作数求值为true那么整个表达式的结果都必然是true因此第二个操作数不会被求值。反过来理解a b只有a为真时才需要看ba || b只有a为假时才需要看b。这正是原文档_posts/en/javascript/2016-01-27-short-circuit-evaluation-in-js.md第一段所阐述的定义也是下面所有实战技巧的理论基础。二、用替代if语句先定义一组测试条件与两个输出函数与原文档示例一致var test true; var isTrue function(){ console.log(Test is true.); }; var isFalse function(){ console.log(Test is false.); };传统写法需要一个完整的if语句// 普通的 if 语句 if(test){ isTrue(); // Test is true }利用的短路特性当test为true时右侧的isTrue()才会执行上面的语句可以压缩成一行// 上面的语句可以使用 写为 ( test isTrue() ); // Test is true当test为false时左侧已经决定了整个表达式的结果为false右侧函数根本不会被调用——这正是我们想要的条件为真才执行语义。仓库第 60 期 tip Three useful hacks 中同样收录了这个模式if(condition){ dosomething(); } // 等价于 condition dosomething();可见这并非孤例而是社区反复验证的通用写法。三、用||替代if(!test)语句把test置为false传统写法是取反后判断test false; if(!test){ isFalse(); // Test is false. }利用||的短路特性当test为false时左侧已无法确定结果右侧isFalse()才会执行当test为true时右侧被跳过。于是等价于一行( test || isFalse()); // Test is false.两种写法输出完全一致但后者在表达条件为假才执行的意图时更加紧凑。管为真时做||管为假时做两者互补。四、用||为函数参数设置默认值||最经典的应用场景是给缺失的参数填充默认值function theSameOldFoo(name){ name name || Bar ; console.log(My best friends name is name); } theSameOldFoo(); // My best friends name is Bar theSameOldFoo(Bhaskar); // My best friends name is Bhaskar调用时不传参数name为undefined假值||触发右侧求值name被赋为默认值Bar传入Bhaskar时左侧为真值直接短路保留原值。仓库第 60 期 tip 对变量默认值的扩展演示更进一步var a; console.log(a); //undefined a a || default value; console.log(a); //default value a a || new value; console.log(a); //default value注意最后一步a已经是default value真值a || new value左侧短路a保持原值不变——说明||默认值写法只会在左侧为假值时生效一旦赋值成功就不会被再次覆盖。五、用安全访问属性避免报错访问未定义对象的属性会抛出运行时错误可以充当安全的守卫var dog { bark: function(){ console.log(Woof Woof); } }; // 调用 dog.bark(); dog.bark(); // Woof Woof. // 但是当 dog 未定义时dog.bark() 将会抛出 Cannot read property bark of undefined. 错误 // 防止这种情况我们可以使用 。 dog dog.bark(); // 只有当 dog 被定义时才会调用 dog.bark()原理依然来自短路规则dog为undefined假值时左侧已决定结果为假右侧dog.bark()根本不会执行从而避免Cannot read property bark of undefined异常dog存在时右侧正常调用。六、深入一truthy/falsy 是短路求值的判定基础理解短路求值必须先理解 JavaScript 的布尔化规则。仓库第 30 期 tip Converting truthy/falsy values to boolean 给出了完整的假值清单与真值示例!! // false !!0 // false !!null // false !!undefined // false !!NaN // false !!hello // true !!1 // true !!{} // true !![] // true所有假值false、0、、null、undefined、NaN都会让短路跳过右侧、让||继续求值右侧而其余值一律按真值处理。这与第 5 期 tip Differences betweenundefinedandnull中两者均为 falsy的结论一致——正因undefined是假值第四节中的默认值技巧和第五节中的安全访问技巧才能成立。七、深入二回调守卫模式 callback callback(err)短路求值在异步编程中最常见的应用是回调守卫只在回调存在时才调用它。仓库第 54 期 tip How to use optional arguments in functions 中两次使用了这一模式// 传统写法 if (err) { return callback callback(err); } // ES6 写法 if (err callback) return callback(err);callback callback(err)同时完成了两件事callback为undefined或null时短路跳过不会抛出callback is not a function异常callback存在时正常调用并把err传给它。这是对第五节安全访问思想的直接延伸——不仅属性可以守卫函数参数同样可以守卫。八、深入三函数式循环中的短路 —— .some 与 .every短路求值不仅作用于操作数也体现在数组迭代方法中。仓库第 58 期 tip Breaking or continuing loop in functional programming 指出for循环可以用break提前终止而.forEach无法 break改用.some后只要回调返回true遍历立即停止相当于短路[0, 1, 2, 3, 4].some(function(val, i) { if (val 2) { return true; // break停止遍历 } console.log(val); // 你的业务代码 }); // 输出: 0, 1用.every也能达到类似效果只是需要返回与.some相反的布尔值。这种返回即短路的迭代语义与/||的结果已定即跳过在思想上完全同源是短路思维在更高层抽象中的体现。九、注意事项与边界陷阱假值陷阱name || Bar对、0、NaN等有意义的假值也会强制替换成默认值。如果业务上需要保留0或空字符串||默认值就不适用应改用显式判断name undefined或 ES6 默认参数function foo(name Bar){}ES6 默认参数只对undefined生效。可读性权衡condition dosomething()适合条件简短、副作用清晰的行内场景条件复杂时传统if语句的可读性与可调试性更优不必强行压缩。返回值是操作数本身a b的结果不是布尔值而是被选中的那个操作数可能是a也可能是b的原值。这在链式访问如obj.a obj.a.b obj.a.b.c中非常有用但也要求开发者明确最终拿到的是真值/假值还是具体对象。与!!的配合需要真正布尔结果时可结合第 30 期 tip 的!!写法!!(dog dog.bark)得到标准布尔值避免结果类型被操作数污染。十、小结短路求值是 JavaScript 中最实用也最容易被忽视的语言特性之一表达条件为真才执行、||表达条件为假才兜底两者共同支撑起默认参数、安全属性访问、回调守卫等高频率实战写法。本指南中的全部示例均来自 jstips 仓库英文原版见 _posts/en/javascript/2016-01-27-short-circuit-evaluation-in-js.md中文版见 _posts/zh_CN/javascript/2016-01-27-short-circuit-evaluation-in-js.md并可继续在 Three useful hacks、Converting truthy/falsy values to boolean、Use optional arguments 与 Break or continue loop in functional programming 等相邻 tip 中延伸阅读。掌握了求值规则与假值边界就能安全、自信地在日常代码中运用这一简洁范式。赞分享教程【免费下载链接】jstipsThis is about useful JS tips!项目地址https://gitcode.com/gh_mirrors/js/jstips点击查看免费下载相关推荐jstips 赋值简写指南用复合运算符、短路求值与字面量写法精简 JavaScript 代码jstips 赋值简写指南用复合运算符、短路求值与字面量写法精简 JavaScript 代码 本文源自 jstips 仓库第 35 期技巧《Operadore教程RSLint —— 让您的JavaScript和TypeScript代码更健壮的神器RSLint —— 让您的JavaScript和TypeScript代码更健壮的神器 还在为JavaScript代码中的潜在错误而烦恼吗还在使用缓慢的lintjstips 第 35 期JavaScript 赋值运算符与赋值简写技巧全解析jstips 第 35 期JavaScript 赋值运算符与赋值简写技巧全解析 本篇技术指南以 jstips https://link.gitcode.com教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

从自细化到自主研究环:LLM自改进的工程路径与落地实践

从自细化到自主研究环:LLM自改进的工程路径与落地实践

这两年我持续在跟进一个话题:AI系统能不能自己改进自己。严格说,这个命题很早就有了,但直到大语言模型成为主流基座,它才从科幻讨论变成了可实验的工程课题。现在业界讨论比较多的是“自细化”(self-refinement&#x…

2026/10/19 3:34:40 阅读更多 →
鸿蒙跨设备剪贴板:从用户设置到分布式KvStore开发实践

鸿蒙跨设备剪贴板:从用户设置到分布式KvStore开发实践

先从一件小事说起:你在手机上复制了一条地址,想发到平板上用;电脑上看到一段代码,想无缝转到手机里粘贴。大多数人的第一反应是发个消息传给自己,或者用网盘、备忘录过一手,麻烦不说,还容易把内…

2026/10/19 13:30:02 阅读更多 →
GPT-Load:统一API Key管理与AI调用智能路由的流量调度指南

GPT-Load:统一API Key管理与AI调用智能路由的流量调度指南

1. 为什么需要 GPT-Load:从“钥匙挂满墙”到“一把总钥匙”先说个场景,我相信很多做 AI 应用的人都有同感。打开电脑想跑个脚本,先找 ChatGPT 的 API Key,再找 Claude 的,还得翻出之前注册的某个中转站 Token&#xff…

2026/10/18 17:43:23 阅读更多 →

最新新闻

软考软件设计师:程序设计语言基础与编译原理考点全梳理

软考软件设计师:程序设计语言基础与编译原理考点全梳理

软考软件设计师上午题一共75道选择题,涉及的知识面铺得非常广。很多人复习到“程序设计语言基础知识”这一章时,都会有同样的感觉:内容不难,但概念太细,编译原理相关的几个阶段总是看完就混,文法那四种类型…

2026/10/19 14:15:32 阅读更多 →
Node.js安装与npm环境配置:从版本选择到镜像加速全流程

Node.js安装与npm环境配置:从版本选择到镜像加速全流程

第一次接触Node.js的人,十个里有七个会倒在“装环境”这一步:官网上一堆版本号不知道选哪个,安装包下载完了一路点Next,最后在终端敲node -v却提示“不是内部或外部命令”。这篇文章就是专门解决这个问题的。我会从下载前的版本选…

2026/10/19 14:15:32 阅读更多 →
iSCSI网络存储详解:从块存储原理到生产环境调优与排障

iSCSI网络存储详解:从块存储原理到生产环境调优与排障

iSCSI这个词,只要做过服务器运维或者数据中心相关工作,应该都不陌生。它本质上是把SCSI存储协议封装到TCP/IP网络里传输,让远端主机像插着一块本地硬盘一样使用网络上的存储设备。说白了,就是用网线把存储空间“拉”到服务器上&am…

2026/10/19 14:15:32 阅读更多 →
4D-Animal:用密集线索与工具链从普通视频重建可动画3D动物模型

4D-Animal:用密集线索与工具链从普通视频重建可动画3D动物模型

视频里一只狗摇着尾巴转了个圈,随后小跑两步,头低下去嗅地面。这时候你手里只有这段普通素材,想要的是一个能在动画软件里旋转、换动作、甚至重新绑定到别的骨骼上的可动画3D狗。放在以前,绝大多数团队的第一反应是:先…

2026/10/19 14:15:32 阅读更多 →
商用车VCU硬件设计:从MPC5744原理图到量产避坑指南

商用车VCU硬件设计:从MPC5744原理图到量产避坑指南

简介:面向新能源整车控制器与嵌入式硬件开发者的VCU硬件设计资料,围绕NXP的MPC5744主控芯片,详解商用车量产整车控制器的硬件原理图与PCB设计,适合电控工程师、嵌入式开发者及车辆工程专业学生参考。压缩包共13个文件,…

2026/10/19 14:15:32 阅读更多 →
IEC 62619:2022工业锂电池安全标准详解:测试项与BMS功能安全

IEC 62619:2022工业锂电池安全标准详解:测试项与BMS功能安全

简介:IEC 62619:2022(第二版,2022年5月)是国际电工委员会发布的工业用二次锂电池与蓄电池安全要求标准,主要面向电池研发、制造、测试与工业设备集成等工程人员,为产品安全设计、性能验证和合规评估提供统一…

2026/10/19 14:14:30 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →