使用默认属性销毁作为函数参数的对象

时间:2019-04-23 07:41:45

标签: javascript function object ecmascript-6

我想将对象作为参数传递给函数。如果该对象的属性'prop'未定义,则应使用默认值对其进行初始化。

如何使用现代JS做到这一点?

我希望这样:

const fun = function(options = { prop: 'default'}) { console.log(options.prop)}


fun({a: 'x', prop: 'hello'}) ... // log: 'hello'

fun({a: 'x'}) ... // log: 'default'

4 个答案:

答案 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