开发者问题收集

未捕获的类型错误:无法解构“undefined”或“null”的属性“name”

2019-02-18
208463

如果传递空对象,对象解构将引发错误

function test ({name= 'empty'}={}) {
  console.log(name)
}
test(null);

Uncaught TypeError: Cannot destructure property name of 'undefined' or 'null'. at test (:1:15) at :1:1

3个回答

请参阅 文档

Default function parameters allow named parameters to be initialized with default values if no value or undefined is passed.

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

function fn(arg = 'foo') {
  console.log(arg);
}
fn(null);

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

function test (arg) {
  const { name = 'empty' } = arg || {};
  console.log(name)
}
test(null);
CertainPerformance
2019-02-18

如果您没有任何参数或为对象分配值,但想要将其传递为空,因为您计划在稍后阶段为其分配值,最好将其传递为空,不要将其放在括号内。

因此,假设您有:

此函数:

const {signup}  = useAuth()

这肯定会引发错误,因为您实际上是在传递没有参数的对象。

要解决此问题,您必须从括号中删除空对象,如下所示:

const signup  = useAuth() 

然后在您的类或函数中使用它,如下所示:

async {....
     await signup(emailRef.current.value, passwordRef.current.value)

...}
RileyManda
2021-04-07
function test (user = {}) {
  const defaultName= 'Invalid User Object'
  if(!user?.name) return defaultName
  const {name} = user
  return user
}
test(null);
Mohammed Alshaer
2021-09-30