未捕获的类型错误:无法解构“未定义”或“空”的属性“名称”

rah*_*kks 17 javascript ecmascript-6 object-destructuring

在传递空对象的情况下,对象解构会引发错误

function test ({name= 'empty'}={}) {
  console.log(name)
}
test(null);
Run Code Online (Sandbox Code Playgroud)

未捕获的类型错误:无法解构name“未定义”或“空”的属性。在测试 (:1:15) 在 :1:1

Cer*_*nce 27

查看文档

如果未传递值或未定义,则默认函数参数允许使用默认值初始化命名参数。

换句话说,如果传递了默认参数,则不会分配null

function fn(arg = 'foo') {
  console.log(arg);
}
fn(null);
Run Code Online (Sandbox Code Playgroud)

在函数的第一行进行解构:

function test (arg) {
  const { name = 'empty' } = arg || {};
  console.log(name)
}
test(null);
Run Code Online (Sandbox Code Playgroud)

  • 问题是,当传递“null”时,默认参数*不会触发*(参见第一个片段)。 (6认同)