javascript - 默认函数参数没有按我的预期工作

标签 javascript node.js function parameters

我有这个功能:

const func = (a, b, options = { opt1: false, opt2: false, opt3: false }) => {
 // do something
 console.log(options); // { opt1: false, opt2: false, opt3: false }
}

所以当我在没有任何参数的情况下调用它时,我得到了这个

func('a', 'b', { opt3: true });
// { opt3: true }

而不是预期:

// { opt1: false, opt2: false, opt3: true }

最佳答案

您已默认选项,但您尚未默认选项的各种属性。由于您正在为 options 提供一个对象,因此正在使用该对象。

您可以使用解构来提供属性的默认值,然后为参数提供空白的默认值:

const func = (a, b, { opt1 = false, opt2 = false, opt3 = false } = {}) => {
 // do something
 console.log(opt1, opt2, opt3);
};

func(1, 2, {opt1: true});
func(1, 2);

当然,您最终得到的选项是离散变量而不是对象。您始终可以重构该对象:

const func = (a, b, { opt1 = false, opt2 = false, opt3 = false } = {}) => {
 const options = {opt1, opt2, opt3};
 // do something
 console.log(options);
};

func(1, 2, {opt1: true});
func(1, 2);

当然,由于这是您自己的对象,因此如果您愿意,您可以愉快地为其分配其他属性,而不必担心修改调用者的对象。

如果你不想使用解构,你只需像 ES2015 之前那样单独提供默认值,但可能使用属性扩展而不是 Object.assign:

const func = (a, b, options = {}) => {
 // do something
 options = {opt1: false, opt2: false, opt3: false, ...options };
 console.log(options);
};

func(1, 2, {opt1: true});
func(1, 2);

关于javascript - 默认函数参数没有按我的预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57843791/

相关文章:

swift - 如何减少此 Swift 函数中返回 false 的次数

javascript - 从另一个文件调用函数

javascript - 从 XMLHttpRequest 解析 JSON 文件

javascript - 为什么我需要在 'stack' 之后添加 [exponent - 1] ?

node.js - Sequelize postgres 过程返回字符串而不是对象

linux - npm install 会导致诸如 npm ERR 之类的错误! Debian 上的 tar.unpack 解压错误

node.js - NodeJS分布式处理(分区-集群)

python - 如何创建带有可选参数的 Python 函数?

javascript - 在 JQuery 和执行函数中使用的 JSON 数组值

javascript - 生成随机问题