如何使用可选对象参数的属性

时间:2016-09-09 17:44:55

标签: javascript function arguments optional-parameters

我有这段代码:

function getName(type, options) {

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

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

我期待将name变量分配给'Buddy',但我得到了这个错误:

  

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

有一种简单的方法可以解决这个问题吗?我希望有一行代码。我正在考虑使用它,但似乎很长且不必要地复杂:

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

3 个答案:

答案 0 :(得分:6)

您可以将检查简化为attributeHasFieldErrorCode,因为每个对象都是真实的。

答案 1 :(得分:1)

在es6中使用可选参数,您只需将其默认为空对象,以免处理未定义。

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

答案 2 :(得分:0)

您可以使用解构来定义参数属性的默认值(请参阅Setting a function parameter's default value)。 添加= {}会使整个参数成为可选参数,允许getName('cat') vs 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'})}`);