如何使用可选对象参数的属性
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'})}`);
我有这个代码:
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'})}`);