具有默认值的简写属性初始值设定项在函数参数中有效,但在对象分配期间无效?

问题描述 投票:0回答:2

考虑一个物体

let student = {
    name: "Josh"
}

和一个函数

function getData({name, age = 20}){
    console.log(name, age)
}

这按预期工作。我们得到

name
age
的控制台日志,默认值为 20。

但是,下面怎么会抛出错误(Uncaught SyntaxError:无效的简写属性初始值设定项)?

let name = "Mike"
let anotherStudent = {name, age = 20}

为什么简写

{name, age = 20}
在函数参数和对象赋值中表现不同?

javascript function javascript-objects
2个回答
1
投票

区别在于赋值目标(函数参数、赋值左)和表达式(函数调用参数、赋值右)之间,而不是函数和赋值之间。具有默认初始化程序的解构模式仅作为赋值的目标有效。

// wrong:
function getData({name, age: 20}) {…}
// correct object destructuring:
function getData({name, age = 20}) {…}
// wrong:
const {name, age: 20} = student;
// correct object destructuring:
const {name, age = 20} = student;
// wrong:
getData({name, age = 20});
// correct object literal:
getData({name, age: 20});
// wrong:
const student = {name, age = 20};
// correct object literal:
const student = {name, age: 20};

0
投票
let name = "Mike"
let anotherStudent = {name, age = 20}

此语法对于创建对象文字无效。问题在于年龄 = 20 部分的使用。在函数参数中允许使用此语法来提供默认值,但直接在对象字面量中不允许使用此语法。

如果您想在创建对象时实现相同的默认值行为,可以使用以下方法:

let name = "Mike"
let anotherStudent = {name, age: 20 /*Your number*/}

在本例中,您在创建对象文字时显式将age属性设置为20。

© www.soinside.com 2019 - 2024. All rights reserved.