我对Javascript比较陌生,我试图理解当前代码中|||的使用。
所以,我正在浏览这篇关于Javascript中reduce的惊人文章,他写了这个例子。
const fruitBasket = ['banana', 'cherry', 'orange', 'apple', 'cherry', 'orange', 'apple', 'banana', 'cherry', 'orange', 'fig' ];
const count = fruitBasket.reduce( (tally, fruit) => {
tally[fruit] = (tally[fruit] || 0) + 1 ;
return tally;
} , {})
count // { banana: 2, cherry: 3, orange: 3, apple: 2, fig: 1 }
[问题]在这里,我无法理解两件事
tally[fruit] = (tally[fruit] || 0) + 1 ;
这个||
在这里做什么,他为什么要使用它?(我知道这是一个 or 运算符(
其次,这在功能结束时, {})
意味着什么?
这里使用||
称为短路评估。这意味着如果tally[fruit]
是真实的,它将使用其值,否则它将使用0
(然后添加1
(。
{}
是reduce()
函数的最后一个参数,它是起始值(在本例中为 emtpy 对象(。一般来说,这可以是任何类型,包括字符串、数字、数组和对象。MDN有一个很好的解释:
初始值可选
用作
callback
第一次调用的第一个参数的值。如果未提供初始值,则将使用数组中的第一个元素。在没有初始值的空数组上调用reduce()
是一个错误。
1.-||
的意思是"或"。表达式表示分配tally[fruit]
的值,或者如果值未定义,则分配0
2.-{}
是 reduce 函数的初始值(空对象(。
此初始值可以是任何类型、数字、数组、对象。随着reduce的每次迭代,这个初始值将被修改(因此也称为"累加器"(。 在您的函数中,tally
是累加器、对象,fruit
是正在迭代的fruitBasket
数组的每个项目。
有关更多信息,请查看 reduce 的文档
|| 代表 OR。 因此,如果 Tally[fruit] 返回 null、未定义、'' 或 0,它将设置为 0 并添加 1
它是JavaScript中的逻辑OR运算符。
(tally[fruit] || 0)
这个语句本质上意味着如果tally[fruit]
是null
或undefined
,那么它将被赋值为0。