使用&& in if()operator

时间:2017-07-08 15:50:11

标签: javascript

我的一个朋友给我写了一些代码(不幸的是,他现在无法访问),我正在努力理解它。

const people = [
  {name: 'morgan', group: 3},
  {name: 'courtney', group: 1},
  {name: 'brian', group: 1},
  {name: 'dog', group: 2}
]

const partitionedPeople = sortedPeople.reduce(
  (parts, person) => {    
    const part = parts[0]

    if (part && person.group === part.group) {
      console.log('found part.group')
    } else {
      console.log('did not find part.group')
    }
    return parts;
  },
  []
);

我不明白的是if (part && person.group === part.group) {}

如果我将其更改为if (person.group === part.group) {},我会收到错误消息。

因为通过第一次迭代,part未定义(空列表中的第一项)并且我要求它找到未定义的.group,这是有道理的。

但是,在(part && person.group === part.group)中添加时效果很好。

part && person.group这样做的功能是什么?

4 个答案:

答案 0 :(得分:2)

&&运算符的工作方式如下:

  • 如果第一个操作数为 truthy ,则返回第二个操作数
  • 如果第一个操作数为 falsy ,则返回第一个操作数

这里,如果partundefined(这是假的),表达式的计算结果为undefined(因为返回了第一个操作数)。 undefined是假的,因此不会执行if正文。

如果定义part并且真实,那么然后才会&&评估第二个操作数,将person.grouppart.group进行比较,返回比较结果。

在JavaScript中,除了false0""nullundefinedNaN之外,一切都很简洁。

答案 1 :(得分:1)

if语句可以像这样重写:

if (part) {
  if (person.group === part.group) {
    //...
  }
}

&&之前的部分检查以确保part存在(不是undefinednull0等。

&&检查person.grouppart.group

之间的平等后的部分

答案 2 :(得分:0)

如果&&的左表达式的值是假的,则返回左表达式的值,否则返回右表达式的值。

因此,当partundefined时,(part && person.group === part.group)会立即返回part(即undefined)。

答案 3 :(得分:0)

失败是因为part没有名为group的属性,可能是因为part本身未定义。

使用&&可确保仅在第一个条件&&为真时才处理/评估part之后的第二个条件。

因此,首先将part置于person.group === part.group,仅当part为真时才会评估part。正如我已经通过删除part.group所说的那样,然后允许代码评估具有.group的第二个条件以及每当您尝试从未定义的对象访问属性(Uncaught TypeError: Cannot read property 'group' of undefined)时将导致未捕获的TypeError。

我认为你的错误看起来像这样:

$(".nested_inside").hover( function(){ $(this).animate({"top": "-10px"}); },function(){ $(this).animate({"top":"initial"}); })