我想将对象作为参数传递给函数。如果该对象的属性'prop'未定义,则应使用默认值对其进行初始化。
如何使用现代JS做到这一点?
我希望这样:
const fun = function(options = { prop: 'default'}) { console.log(options.prop)}
fun({a: 'x', prop: 'hello'}) ... // log: 'hello'
fun({a: 'x'}) ... // log: 'default'
答案 0 :(得分:5)
如果要在参数列表中进行分解,则将无法再访问 entire 原始对象(此处为options
)-您将只具有分解后的变量。因此,省去options =
部分,并将=
放在prop
之后,而不是:
之后。例如:
const fun = function({ prop = 'default', a }) {
console.log('prop:', prop, 'a:', a);
};
fun({
a: 'x',
prop: 'hello'
}) // log: 'hello'
fun({
a: 'x'
}) // log: 'default'
如果也可能不使用任何参数调用该函数,则可以默认分配一个空对象:
const fun = function({ prop = 'default', a } = {}) {
console.log('prop:', prop, 'a:', a);
};
fun({
a: 'x',
prop: 'hello'
}) // log: 'hello'
fun({
a: 'x'
}) // log: 'default'
fun(); // log: 'default'
答案 1 :(得分:2)
改为使用以下语法:
const fun = ({ prop = "default" }) => console.log(prop);
fun({ a: "x", prop: "hello" });
fun({ a: "x" });
请注意,您将丢失该对象,并且只能访问prop
。为了解决这个问题,您可以收集其余的属性并将它们扩展为一个对象:
const fun = ({ prop = "default", ...rest }) => {
console.log(prop);
const otherProps = { ...rest };
console.log(JSON.stringify(otherProps));
}
fun({ a: "x", prop: "hello" });
fun({ a: "x" });
fun({ a: "x", b: "nonexistent", c: true, prop: "Hi!" });
答案 2 :(得分:1)
您可以使用rest属性,并将prop
从对象中排除,获取该值或默认值,然后将此值分配回该对象。
const
fun = function({ prop = 'default', ...options }) {
Object.assign(options, { prop });
console.log(options.prop);
};
fun({ a: 42 });
fun({ a: 42, prop: 'bar' });
答案 3 :(得分:0)
我认为您必须在函数内部处理此问题。以下是适用于您特定情况的代码
var fun = function(options = { prop:'default'}) {
if(options.prop == undefined){
options.prop = 'default'
}
console.log(options.prop)
}
fun({a:'hello'})// logs: default