如何在JavaScript中使用命名参数的默认值

5

我有一个 JavaScript 函数,它以这样的形式作为参数接受一个对象:

const someFunc = ({ a }) => { <do something> }

我这样调用函数:

a = 'some value'
someFunc({ a })

但有时候,我需要在不传递a的情况下调用该函数。在这种情况下,我需要为a使用默认值。如何在对象内为一个键添加默认值?


这个回答解决了你的问题吗?在JavaScript中为对象设置默认值 - yqlim
4个回答

9

我认为你正在寻找 默认参数

const someFunc = ({ a = "foo" }) => {
   console.log(a);
}
someFunc({}); // "foo"
someFunc({a: "bar"}); // "bar"

更新 如果你想要a默认为"foo"而无需传递任何参数,你需要为包含a的对象设置一个默认参数。就像这样:

const someFunc = ({ a = "foo" } = {}) => {
   console.log(a);
}
someFunc(); // "foo"


1
你的代码无法运行:未捕获的类型错误:无法读取未定义的属性'a' - Jeremy Thille
嗯,你的编辑没有起作用,我的代码是按照OP所要求的方式运行的(即没有传递 “a” ,而是包含 “a” 的对象)。你的编辑应该在 someFunc() 调用中添加任何对象。如果OP想要在不传递任何内容的情况下调用 someFunc,函数签名应该包括这一点。 - ZER0
我没有编辑任何东西。我创建了一个片段并调用了你自己的函数。"你的编辑应该已经将任何对象添加到someFunc()调用中"。不,这正是重点,OP希望如果没有传递参数,则使用默认参数... - Jeremy Thille
你以一种不打算调用的方式添加了函数调用:当然它不起作用。这就是“编辑(运行)代码”,你不仅仅添加了片段。如果调用不当,任何代码都无法正常工作。OP字面上写道:“我需要调用函数而不传递a”。而a是属性,而不是对象。这就是我回答的问题。如果他想要整个对象,我编辑了我的答案以涵盖该场景。但这不是他写的。 - ZER0

3

ES6支持为参数设置默认值:

const someFunc = ({a} = {a : 6}) => { 
  console.log({a})
}
someFunc({ a : 3 })
someFunc()


可以的!不过,如果我想这样调用函数 someFunc({}) 呢?如果对象内有多个键可能需要这样做。 - Yedhu Krishnan
JS是一种弱类型语言,如果函数定义为someFunc = (obj = {a : 6}),则可以将任何对象传递给该函数。如果答案对您有帮助,请不要忘记将其标记为已接受! - Jeremy Thille

2

const someFunc = ({a, b, c ,d} = {a:10, b: 12, c:3, d:4}) => {
   console.log(a, b, c ,d);
}
someFunc()

请记住,这段代码在IE中实际上不会生效。

以下是适用于IE的解决方法:

    var someFunc = function someFunc() {
    var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
       a: 10
    },
    a = _ref.a;

    //here starts the function
    console.log(a);
};
someFunc();


可以!另外,如果我想像 someFunc({}) 这样调用它怎么办?如果对象内有多个键,则可能需要这样做。 - Yedhu Krishnan
很遗憾,如果我像这样调用它 someFunc({}),它将不起作用。在这里,我传递了一个空对象而不是什么都没有传递。 - Yedhu Krishnan

0

const someFunc = ({ a }) => { 
 typeof a === 'undefined' 
 ? a = 'some default'
 : a = a;
 console.log(a);
}

a = 'some value';
someFunc({ a });
someFunc({});


2
如果a是一个布尔值且其值为false,最好检查a是否未定义。 - S. Walker
这是一种奇怪的三元赋值写法。通常我会使用 a = a === undefined ? "default" : a 而不是滥用赋值表达式。您能解释一下为什么这比现有答案更可取吗? - ggorlen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接