【问题标题】:Understanding the use of || in the code [duplicate]了解 || 的使用在代码中[重复]
【发布时间】:2018-05-31 14:39:03
【问题描述】:

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

|| 在这里做什么?他为什么使用它? (我知道这是一个或运算符)

其次,函数末尾的, {}) 是什么意思?

【问题讨论】:

  • 如果 tally[fruit] 未定义,则回退到 0。{} 是累加器,是您的 reduce 函数开始的基础对象。
  • 请有人在他们的回答中提及虚假值,而不是特别提到 undefinednull。它适用于所有虚假值。
  • Array.prototype.reduce 接受两个参数。第一个是一个函数,第二个是一个初始值,它将接收来自reduce 函数的值。 || 是一个或运算符。所以这里是说如果tally[fruit] 不存在+ 1 如果它存在则将1 添加到当前值。
  • ++ 用于使用 reduce。现在您知道如何使用 reduce,您可以忘记所有其他数组方法

标签: javascript


【解决方案1】:

这里使用|| 称为短路评估。这意味着如果tally[fruit]truthy,它将使用它的值,否则它将使用0(然后添加1)。

{}reduce() 函数的最后一个参数,它是起始值(在本例中是一个 emtpy 对象)。一般来说,这可以是任何类型,包括字符串、数字、数组和对象。 MDN 有很好的解释:

initialValueOptional

用作callback 第一次调用的第一个参数的值。如果未提供初始值,则将使用数组中的第一个元素。在没有初始值的空数组上调用 reduce() 是错误的。

【讨论】:

  • 6个答案,值得一读。
  • 你能提到累加器可以是任何类型吗?它不仅是一个数组或对象。
  • @MaxBaldwin 好主意
  • 非常感谢您的回答,只是为了确认,即使值为true也会加1?
  • @KuchBhi 是的。短路评估用括号括起来。他们之外的任何事情都会发生。
【解决方案2】:

1.- || 表示“或”。表达式表示赋值tally[fruit],或者如果值未定义,则赋值0

2.- {}是reduce函数的初始值(一个空对象)。

这个初始值可以是任何类型,一个数字,一个数组,一个对象。随着reduce的每次迭代,这个初始值都会被修改(因此也被称为“累加器”)。 在您的函数中,tally 是累加器、对象,fruit 是被迭代的 fruitBasket 数组的每一项。

更多信息,请查看reduce的文档

【讨论】:

    【解决方案3】:

    ||代表或。所以如果 tally[fruit] 返回 null、undefined、'' 或 0,它将被设置为 0 并添加 1

    【讨论】:

      【解决方案4】:

      它是 JavaScript 中的逻辑 OR 运算符。

      (tally[fruit] || 0)这个语句本质上意味着如果tally[fruit]null或者undefined,那么它会被赋值为0。

      【讨论】:

      • 不是“默认运算符”
      • console.log(0||1); 将返回 1 而不是 0,大约是 truthy
      猜你喜欢
      • 2019-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-21
      • 2010-12-13
      • 2011-11-17
      • 1970-01-01
      • 2012-09-10
      相关资源
      最近更新 更多