【问题标题】:How to use properties of optional object argument如何使用可选对象参数的属性
【发布时间】:2016-09-09 17:44:55
【问题描述】:

我有这个代码:

function getName(type, options) {

    if (type == 'dog') {
        var name = 'Rover';
    }
    else {
        var name = options.name || 'Buddy'
    }

    return name;
}
alert(getName('cat'));

我希望将 name 变量分配给“好友”,但我得到了这个错误:

无法读取未定义的属性“名称”

有没有简单的方法来处理这个问题?我希望有一个单行代码。我正在考虑使用它,但它似乎很长而且不必要地复杂:

var name = (options !== undefined && options.name) ? options.name : 'Buddy';

【问题讨论】:

    标签: javascript function arguments optional-parameters


    【解决方案1】:

    您可以使用解构定义参数属性的默认值(请参阅Setting a function parameter's default value)。 添加= {} 使整个参数成为可选参数,允许getName('cat')getName('cat', {})

    请注意,您不会将整个对象作为参数传递 - 只是您定义的属性:getName('bat', {somekey: 'I will not be passed to the function!'})

    function getName(type, {name = 'Buddy'} = {}) {
      if (type == 'dog') {
        name = 'Rover';
      }
      return name;
    }
    alert(`
    cat: ${getName('cat')}, 
    cat with name: ${getName('cat', {name: 'Puss'})}, 
    dog: ${getName('dog')}, 
    dog with name: ${getName('dog', {name: 'Spot'})}`);

    【讨论】:

      【解决方案2】:

      您可以将检查简化为options && options.name || 'Buddy',因为每个对象都是真实的。

      【讨论】:

        【解决方案3】:

        在 es6 中使用可选参数,你可以简单地将其默认为一个空对象,以免处理 undefined。

        function(type, options = {}) {
          return type === 'dog' ? 'Rover' : options.name || 'Buddy';
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-04-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-12-16
          • 2018-10-18
          相关资源
          最近更新 更多