考虑一个物体
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}
在函数参数和对象赋值中表现不同?
区别在于赋值目标(函数参数、赋值左)和表达式(函数调用参数、赋值右)之间,而不是函数和赋值之间。具有默认初始化程序的解构模式仅作为赋值的目标有效。
// 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};
let name = "Mike"
let anotherStudent = {name, age = 20}
此语法对于创建对象文字无效。问题在于年龄 = 20 部分的使用。在函数参数中允许使用此语法来提供默认值,但直接在对象字面量中不允许使用此语法。
如果您想在创建对象时实现相同的默认值行为,可以使用以下方法:
let name = "Mike"
let anotherStudent = {name, age: 20 /*Your number*/}
在本例中,您在创建对象文字时显式将age属性设置为20。