23

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

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

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

4

4 回答 4

33

请参阅文档

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

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

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

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

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

于 2019-02-18T10:21:39.020 回答
0
function test (user = {}) {
  const defaultName= 'Invalid User Object'
  if(!user?.name) return defaultName
  const {name} = user
  return user
}
test(null);
于 2021-09-30T18:20:57.437 回答
0

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

所以让我们假设你有:

这个功能:

const {signup}  = useAuth()

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

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

const signup  = useAuth() 

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

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

...}
于 2021-04-07T21:29:17.007 回答
-2

这就是你需要的:

function doDotsCalculations(el) {
    const height = el.height();
    const {top = 'empty', left = 'empty'} = el.position() || {};
    const res = height + top + 20;

    $(".owl-carousel .owl-dots").css({
        top: `${res}px`,
        left: `${left}px`
    });
}
于 2021-02-11T16:49:39.320 回答