Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript默认参数_Javascript_Javascriptcore_Default Parameters_Destructuring - Fatal编程技术网

JavaScript默认参数

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函数中

假设我想处理集合数组中对象的某些属性x。但集合可能包含没有此类属性的对象,甚至可能包含未定义的对象。比如说

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