我对Javascript相对较新,我试图理解当前代码中 || 的使用。
所以,我在Javascript中经历了这个amazing article on web about 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 ;
这是||
在这做什么,为什么他用它? (我知道这是一个或运营商)
其次,这意味着, {})
在功能结束时是什么意思?
答案 0 :(得分:7)
这里使用||
称为短路评估。这意味着如果tally[fruit]
为truthy,则会使用其值,否则将使用0
(然后添加1
)。
{}
是reduce()
函数的最后一个参数,它是起始值(在本例中是一个emtpy对象)。一般来说,这可以是任何类型,包括字符串,数字,数组和对象。 MDN有一个很好的解释:
<强> initialValueOptional 强>
用作第一次调用
callback
的第一个参数的值。如果未提供初始值,则将使用数组中的第一个元素。在没有初始值的空数组上调用reduce()
是错误的。
答案 1 :(得分:3)
1.- ||
表示“或”。表达式意味着赋值tally[fruit]
,或者如果值未定义,则分配0
2.- {}
是reduce函数的初始值(空对象)。
此初始值可以是任何类型,数字,数组,对象。每次reduce的迭代,都会修改这个初始值(因为这个原因也被称为“累加器”)。
在您的函数中,tally
是累加器,对象和fruit
是正在迭代的fruitBasket
数组的每个项目。
有关详细信息,请查看reduce
的文档答案 2 :(得分:1)
||代表OR。所以如果tally [fruit]返回null,undefined,''或0,它将被设置为0并添加1
答案 3 :(得分:1)
它是JavaScript中的逻辑OR运算符。
(tally[fruit] || 0)
此语句实质上意味着如果tally[fruit]
为null
或undefined
,则会将其指定为0。