gpt4 book ai didi

javascript - 传播对象参数

转载 作者:行者123 更新时间:2023-11-29 23:27:30 26 4
gpt4 key购买 nike

使用扩展语法,我们可以将数组函数参数扩展为不同的参数变量:

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);

要“修复”上述问题,看来我们必须使用解构赋值来模拟“展开”:

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 中的循环无法访问解构变量。相反,循环将传入数据视为完整(未解构的)对象。那是(有点)预期的。有什么方法可以遍历解构的不同参数值吗?

最佳答案

Why is it not possible to spread object arguments in the same way?

展开用于可迭代的东西,为位置参数使用数组。对象不可迭代——它们甚至没有顺序!

The loop in myDestructor just treated the incoming data as a full (non-destructured) object. Any idea why?

好吧,因为传入的数据——调用你的函数的参数——一个对象。 arguments[0] 是一个对象。您在参数声明中从其属性初始化了多个变量只是语法糖。您同样可以编写 function (o) { var {nk, mk, zk} = o; 而不是 function ({nk, mk, zk}) {。/p>

关于javascript - 传播对象参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48548161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com