为什么展开运算符将对象参数转换为一项数组?
"use strict";
let obj1 = { foo: 'bar', x: 42 };
function abc(...aaa) {
console.log(aaa);
}
abc(obj1)
// log result: [{foo: 'bar', x: 42}]
"use strict";
let obj1 = { foo: 'bar', x: 42 };
function abc(...aaa) {
console.log(aaa);
}
abc(obj1)
// log result: [{foo: 'bar', x: 42}]
回答
这不是传播。这些是rest parameters,它们收集传递到单个数组中的所有剩余参数。
这里有一个参数,因此使用 rest 创建一个只包含该参数(恰好是一个对象)的数组。
以下是一些其他示例,可能会更清楚:
function abc(...aaa) {
console.log(aaa);
}
abc(5, 5, 5, 5, 5)
abc(3, 1, 2, 5)
abc(1, 2, 3)
abc(0)
它只会以单个数组的形式记录所有传递的参数。