ES6默认值仅适用于某些params对象

时间:2016-07-18 15:51:00

标签: ecmascript-6

给定如下函数,为了能够调用showToast({ text: "some text"})并仍然获得params.autoHideparams.action的默认值,使用正确的语法是什么?

function showToast (params = {text: 'Something happened!', autoHide: false, action: 'CLOSE'}) {
    //noinspection JSUnresolvedFunction
    const toast = $mdToast.simple()
        .textContent(params.text)
        .position('top right')
    ;

    if (!params.autoHide) {
        toast.hideDelay(false);
    }
    if (params.action) {
        //noinspection JSValidateTypes
        toast.action(params.action); // label for close btn
    }

    $mdToast.show(toast);
}

2 个答案:

答案 0 :(得分:2)

您也可以在参数列表中使用对象解构。唯一改变的是您不能通过params对象访问参数:

function foo({text = "Hi", autoHide = false, action = "CLOSE"} = {}) {
  console.log(text + " " + autoHide + " " + action)
}

foo({text: "asd"});

请参阅babel/repl

请注意解构对象的= {}默认值。这使得可以在没有单个参数的情况下调用该函数:foo();

答案 1 :(得分:1)

您可以使用参数对象解构来实现此目的:

function showToast({text = 'Something happened!', autoHide = false, action = 'CLOSE'} = {}) {
    //noinspection JSUnresolvedFunction
    const toast = $mdToast.simple().textContent(text).position('top right');

    if (!autoHide) {
        toast.hideDelay(false);
    }
    if (action) {
        //noinspection JSValidateTypes
        toast.action(action); // label for close btn
    }

    $mdToast.show(toast);
}

showToast({ text: "some text" }) // defaults autoHide to false, action to 'CLOSE'

请参阅"Setting a function parameter's default value"