据我所知,使用ES6语法,可以创建一个函数,它将一个对象作为参数,该参数可以有一个默认值,如下所示:
function exampleFunction(objParam = {val1: 1, val2: 2}) {
//...
}
如果我致电exampleFunction()
,objParam
将获得默认值。但是,如果我致电exampleFunction({val1: 3})
,则objParam.val2
为undefined
。这是有道理的,因为没有应用默认值。有没有什么办法可以确保objParam.val2
确实有一个值,使用ES6表示法?我知道我可以在函数中添加检查,但这会导致代码不一致,我宁愿不这样做。
编辑:澄清一下,这是一个更好的例子:
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
...
}
答案 0 :(得分:3)
您可以在参数中使用destructuring来提供默认值:
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();
答案 1 :(得分:1)
可能不像你想要的那样干净,但你可以这样做
function exampleFunction(objParams) {
const defParams = { val1: 1, val2: 2 };
const finalParams = { ...defParams, ...objParams }
// final params takes the default params and overwrites any common properties with incoming params
// ...
}