undefined 作为默认参数仅在参数未传入或显式传 undefined 时生效,null、0、false、'' 等假值均不触发;ES6 默认值等价于“x === undefined”判断,若需 null 也触发默认值,应使用 ??、|| 或显式条件判断。

在 JavaScript 中,undefined 作为函数参数的默认值时,其行为与 null 或其他假值(如 false、0、'')不同——它只在参数**未传入**或显式传入 undefined 时触发默认值逻辑,而不会因传入其他假值被覆盖。
参数未传或显式传 undefined 才会使用默认值
ES6 的默认参数语法 function fn(x = 'default') 实际等价于:
“当 x 是 undefined 时,才赋值为 'default'”。这意味着:
- 调用
fn()→ x 是undefined→ 使用默认值 - 调用
fn(undefined)→ x 显式为undefined→ 同样使用默认值 - 调用
fn(null)、fn(0)、fn('')、fn(false)→ x 被赋为对应值 → 不使用默认值
区分 undefined 和 null 的实际影响
很多开发者误以为 null 也会触发默认值,但其实:
-
undefined表示“无值”(missing or not set) -
null表示“有意为空”(explicitly empty) - 默认参数机制只对前者敏感,后者会被当作有效输入接收
例如:
function greet(name = 'Anonymous') { return `Hello, ${name}`; }<br>greet(); // "Hello, Anonymous"<br>greet(undefined); // "Hello, Anonymous"<br>greet(null); // "Hello, null"
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
想让 null 也走默认值?需手动判断
若希望 null、空字符串、0 等也被视为“无效”,应改用逻辑或(||)或空值合并(??)运算符:
-
function fn(x) { x = x ?? 'default'; ... }→null和undefined都触发 -
function fn(x) { x = x || 'default'; ... }→null、0、false、''都触发(注意:可能误判合法假值) - 更安全写法:
function fn(x) { if (x === undefined || x === null) x = 'default'; ... }
注意默认值表达式的执行时机
默认值表达式仅在参数为 undefined 时求值,且每次调用独立执行:
-
function log(time = Date.now()) { console.log(time); }
多次调用会得到不同时间戳 - 避免副作用:不要在默认值中写修改全局状态、发请求等操作
- 可利用此特性做轻量级惰性初始化:
function init(data = getDataFromCache())

















