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

How to use properties of optional object argument

我有这个代码:

function getName(type, options) {

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

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

我原本希望将 name 变量分配给 'Buddy',但我却收到了这个错误:

Cannot read property 'name' of undefined

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

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

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

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

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

您可以使用解构为参数的 属性 定义默认值(参见 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'})}`);