JavaScript默认参数
假设我想处理集合数组中对象的某些属性x。但集合可能包含没有此类属性的对象,甚至可能包含未定义的对象。比如说JavaScript默认参数,javascript,javascriptcore,default-parameters,destructuring,Javascript,Javascriptcore,Default Parameters,Destructuring,假设我想处理集合数组中对象的某些属性x。但集合可能包含没有此类属性的对象,甚至可能包含未定义的对象。比如说 let array = [ {x: 1}, {x: 2}, {}, {x: 4}, undefined ] 这个想法是用默认参数保护我自己不受这种边缘情况的影响。设为0。我试图解决这个问题 array.map(({x: x = 0}) => process(x)) 但它在未定义的情况下失败。是否有任何方法可以使用默认参数和解构来解决此问题,而无需在map函数中
let array = [
{x: 1},
{x: 2},
{},
{x: 4},
undefined
]
这个想法是用默认参数保护我自己不受这种边缘情况的影响。设为0。我试图解决这个问题
array.map(({x: x = 0}) => process(x))
但它在未定义的情况下失败。是否有任何方法可以使用默认参数和解构来解决此问题,而无需在map函数中写入检查/设置代码?您可以在
.map
之前使用.filter
,以清除所有值,如null
,0
,'
,false
array = array
.filter((el) => el)
.map(({x: x = 0}) => process(x));
里面有很好的描述
默认函数参数允许在没有值或未定义时使用默认值初始化形式参数
通过了
所以null
是值,所以如果将null
传递给函数,则默认值不使用
function test(x = 10) {
console.log(x);
}
test(undefined); // 10
test(); // 10
test(null); // null
test(0); // 0
test(''); // ''
您可以为默认对象指定默认值
array.map(({x : x = 0} = 0) => process(x));
它失败的原因与
var x相同;x、 hi=10代码>。它试图访问/写入未分配变量的属性,很可能抛出TypeError
Yes,这个有效。如果array.map(({x:x=0}={})=>process(x)),则结果相同;我不明白这到底是为什么,但未定义的是完美的处理。如果有什么解决方案可以让If不在null上崩溃,我会100%高兴:)实际上不只是=0或={},而是=除了null和未定义之外的任何东西。现在不知道为什么…原因是它使默认参数机制开始工作,当它遇到未定义的值时,它会用一些值替换它,任何试图在该值上查找字段x的值。这是一个很小的问题,它在null上失败了:(将不得不进一步深入分解以了解如何处理null。在不分解的情况下,可以使用类似于array.map(x=>process((x |{}).x | | 0));
的东西,但这当然不是目标:D