呜啦!日常碎碎念,偶尔掉落优质前端博文推荐、学习资源等
网页:https://tg.cosine.ren
本频道的搜索Bot 来辣 👉 @cosSearchBot
私聊直接发消息就可以搜索啦~
🔖tags
#优质博文 #资源推荐 #博客更新 #碎碎念 #项目更新 #手工 #书摘 #阮一峰的科技周刊 #新动态

图频:Cosine 🎨 Gallery @CosineGallery
猫片: @cosine_cat
#优质博文 #JavaScript #ES2021 #前端 #新特性
Logical assignment operators in JavaScript: small syntax, big wins

AI 摘要:本文介绍了 JavaScript 的逻辑赋值运算符(logical assignment operators),即 =, &&=, ??=,这些自 ES2021 起纳入标准的新语法极大简化了条件赋值的场景。这些运算符结合原有逻辑运算与赋值,帮助开发者更安全、高效地管理状态、赋默认值并减少样板代码,同时保留了短路(short-circuit)行为。作者详细对比了它们和传统写法的区别,以及在实际开发中的注意事项和最佳应用场景。

1. 逻辑赋值运算符基础
• 逻辑赋值运算符通过将逻辑运算符(||、&&、??)与赋值操作(=)结合,形成简写形式。
• 这些运算符延续了短路运算特性,仅在需要时才计算右侧表达式,提高性能并避免副作用。
• 非常适合简化日常中对变量赋默认值、状态更新的代码书写。

2. 三种主要运算及应用场景
逻辑或赋值(=):当左侧为假值(falsy)时赋值,用于没有初始化或需要提供默认值的场景,但会覆盖如 0、''、false 这类本应保留的有效值。
逻辑与赋值(&&=):当左侧为真值(truthy)时赋值,适合在当前条件满足基础上再作更新,注意右侧结果直接替换原值,可能变为假值。
空值合并赋值(??=):仅在左侧为 null 或 undefined 时赋值,更安全地保持如 0、''、false 这类需要保留的有效值,适用于需严格区分“未赋值”与“有效但为假”的情况。

3. 使用场景与注意事项
组件属性默认值(如 React 的 props):props.showHelpText ??= true;
全局状态或配置默认值:config.apiBase = '/api/v1';
数据清洗和表单处理:formData.username &&= formData.username.trim();
• 应避免使用可覆盖有效“假值”的 =,遇到需特殊区分空值的情况优先采用 ??=。
• 运算符左侧不能使用可选链(optional chaining),否则会抛出语法错误。
• 短路特性可避免无谓计算(如 API 密钥获取只在必要时执行)。

4. 浏览器与环境兼容性
• 支持:Chrome 85+、Firefox 79+、Safari 14+、Edge 85+、Node.js 15+
• 不支持:Internet Explorer
• 老旧环境可通过 @babel/preset-env(ES2021 配置)进行转译支持。

5. 实际意义与开发建议
• 逻辑赋值运算符虽然是小语法,但对代码可读性、简洁性以及防止常见赋值错误都极有帮助。
• 尤其适合前端组件状态管理、API 参数默认化、表单数据标准化等场景。
• 现已广泛兼容,开发者只需简单迁移习惯即可高效使用。


author Matt Smith
 
 
Back to Top