使用扩展语法,我们可以将数组函数参数扩展为不同的参数变量:
var mySpreader = function (nk, mk, zk) {
console.log('Spread parameter 1: ' + nk);
for (let v in arguments){
console.log('Spread parameter: ' + arguments[v]);
}
};
var spreadArr = ['a', 'b', 'c'];
mySpreader(...spreadArr);
问题1:为什么不能以相同的方式传播对象参数?以下引发错误:
var spreadObj = {mk: 'm', nk: 'n', zk: 'z'};
mySpreader(...spreadObj);
To" fix"如上所述,似乎我们必须使用解构赋值来模拟"传播":
var myDestructor = function ({nk, mk, zk}) {
console.log('Destructioned parameter: ' + nk);
for (let v in arguments[0]){
console.log(v);
console.log(arguments[0][v]);
}
};
myDestructor({mk: 'm', nk: 'n', zk: 'z'});
问题2 :myDestructor中的循环无法访问析构变量。相反,循环将传入数据视为完整(非解构)对象。那是(有点)预期的。有没有办法循环遍历破坏的不同参数值?
答案 0 :(得分:1)
为什么不能以相同的方式传播对象参数?
Spreading用于可迭代的东西,使用数组用于位置参数。对象不可迭代 - 他们甚至没有订单!
myDestructor
中的循环只是将传入数据视为完整(非解构)对象。知道为什么吗?
好吧,因为传入的数据 - 你的函数被调用的参数 - 是一个对象。 arguments[0]
是一个对象。您在参数声明中从其属性初始化了多个变量只是语法糖。你也可以写function (o) { var {nk, mk, zk} = o;
而不是function ({nk, mk, zk}) {
。