我有这段代码:
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';
答案 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'})}`);