在阅读各类经典 JavaScript 库(如 jQuery、Lodash、早期框架插件)的源码时,常常会在模块开头看到 var a = a || {}; 这行代码。本文剖析其利用逻辑或(OR)短路特性的核心原理,以及现代 ES6+ 的替代方案。
一、 核心原理:逻辑或(||)的“短路求值”机制
在 JavaScript 中,逻辑或运算符 || 并不是单纯返回布尔值 true/false,而是执行短路求值:
- 如果左侧表达式转换为布尔值为真值(Truthy),直接返回左侧操作数的值;
- 如果左侧表达式为假值(Falsy,如 undefined, null, false, 0, ""),则返回右侧操作数的值。
因此,var a = a || {}; 的作用是:如果变量 a 之前已经被定义过,则保留原值;如果 a 是 undefined(未定义),则初始化为一个空的 Object 对象 {}。这在构建全局命名空间与模块化隔离时极其常见。
二、 现代 ES6+ 演进方案:空值合并(??)与默认参数
// 1. ES6 函数默认参数(语法更干净)
function initConfig(config = {}) {
// ...
}
// 2. ES2020 空值合并运算符 ??(避免数字 0 或 false 被误当成假值重置)
const count = userCount ?? 10;