javascript - 将具有可选/默认属性的对象作为参数的函数?
问题描述
我知道,使用 ES6 语法,可以创建一个将对象作为参数的函数,并且该参数可以具有默认值,如下所示:
function exampleFunction(objParam = {val1: 1, val2: 2}) {
//...
}
如果我调用exampleFunction()
,objParam
会被赋予默认值。但是,如果我打电话exampleFunction({val1: 3})
,objParam.val2
就是undefined
。这是有道理的,因为没有应用默认值。有什么方法可以使用 ES6 表示法确保它objParam.val2
确实具有价值?我知道我可以在函数中添加检查,但这会在代码中引入不一致,我宁愿不这样做。
编辑:为了澄清,这是一个更好的例子:
function exampleFunction(param = 0, objParam = {val1: 1, val2: 2}) {
return objParam.val1;
}
exampleFunction(); // Returns 1 (this is good)
exampleFunction(1, {val1: 2}); // Returns 2 (this is good)
exampleFunction(1, {val2: 3}); // Returns undefined (I want it to return 1)
这是我目前拥有的,它确实有效,但有点不雅:
function exampleFunction(param = 0, objParam = {val1: 1, val2: 2}) {
if(objParam.val1 === undefined) objParam.val1 = 1
if(objParam.val2 === undefined) objParam.val2 = 2
...
}
解决方案
您可以在参数中使用解构来提供默认值:
function exampleFunction({val1 = 1, val2 = 2} = {}) {
console.log(val1, val2);
}
exampleFunction({val1: 5});
exampleFunction();
如果要将参数保留为对象,可以使用Object.assign
:
function exampleFunction(origParams = {}) {
const objParam = Object.assign({ val1: 1, val2: 2 }, origParams);
console.log(objParam.val1, objParam.val2);
}
exampleFunction({val1: 5});
exampleFunction();
推荐阅读
- python - 在 Pandas Dataframe 中并行加载输入文件
- r - 为什么 ggplotly 会在我闪亮的应用程序中切断图例?
- javascript - 检索firebase数据库json
- c# - Linq查询根据特殊条件分组
- rust - 如何使用 Serde 将字段解析为字符串?
- node.js - 在 gulp 中获取祖父母目录名称
- mysql - 默认 AUTH 凭据不匹配 Laravel
- pervasive-sql - Pervasive SQL 中不区分大小写的 LIKE 子句
- python-3.x - 从 Facebook 帖子中删除原始链接和标题
- kubernetes - Kubernetes 滚动更新不停机?