了解||的使用在代码中

时间:2018-05-31 14:39:03

标签: javascript

我对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 ; 

这是||在这做什么,为什么他用它? (我知道这是一个或运营商)

其次,这意味着, {})在功能结束时是什么意思?

4 个答案:

答案 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]nullundefined,则会将其指定为0。