未捕获的类型错误:无法解构“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