gpt4 book ai didi

javascript - 是否可以使用 rest 运算符提供默认参数

转载 作者:行者123 更新时间:2023-12-05 04:40:52 25 4
gpt4 key购买 nike

我正在学习 ES6 基础类(class)并尝试使用函数的默认参数和剩余运算符。我已经使用默认参数定义了一个函数 sayHi,然后定义了一个没有提供所需输出的 ​​rest 运算符。

const sayHi = (greetings, ...names) => {

names.forEach(item => {
console.log(`${greetings} ${item}`);
});

}

sayHi('Hi', 'Ahsan', 'Awais', 'Haseeb');

上面的代码片段可以正常工作。但是当我尝试为 greetings 变量设置默认参数值时,它有效但给出了不需要的结果,即值 'Ahsan'greetings 获取变量。

const sayHi = (greetings = ' Hi', ...names) => {

names.forEach(item => {
console.log(`${greetings} ${item}`);
});

}

sayHi('Ahsan', 'Awais', 'Haseeb');

有没有一种方法可以在 rest 运算符之前像上面那样在函数中设置默认参数?

最佳答案

你不能,不。 rest 参数仅获取未被任何先前形式参数使用的“其余”参数,因此 greeting 将始终接收第一个参数的值。

另外,由于名称和问候语的类型相同,如果您想以这种方式接受名称,则根本无法提供默认值。

您有几个选择:

柯里化(Currying)函数

你可以有一个函数来接受问候语并返回一个函数,这个函数将它与你传递的任何东西一起使用:

const greet = (greeting = "Hi") => (...names) => {
for (const name of names) {
console.log(`${greeting} ${name}`);
}
};

greet()("Ahsan", "Awais", "Haseeb");
greet("Hello")("Ahsan", "Awais", "Haseeb");

注意我们是怎么调用它的:

greet()("Ahsan", "Awais", "Haseeb");

greet() 使用默认问候语创建函数。然后我们通过在其上使用 ("Ahsan", "Awais", "Haseeb") 来调用该函数。 greet("Hello") 创建一个使用问候语 "Hello" 的函数(然后我们调用它)。

(我还冒昧地使用了 for..of 而不是 forEach,但这是风格问题。)

取名字为数组

另一种选择是接受名称作为数组。这样,我们就可以在函数内部判断我们是否收到了问候语:

const greet = (greeting, names) => {
if (Array.isArray(greeting)) {
names = greeting;
greeting = "Hi";
}
for (const name of names) {
console.log(`${greeting} ${name}`);
}
};

greet(["Ahsan", "Awais", "Haseeb"]);
greet("Hello", ["Ahsan", "Awais", "Haseeb"]);

关于javascript - 是否可以使用 rest 运算符提供默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70184088/

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