JS中的逻辑运算符。他们的意思是什么?

时间:2013-07-06 16:26:53

标签: javascript logic boolean-logic

我发现了一段包含以下循环的代码:

for (var i = 0; i < 3; i++) {
  tabMap['tab' + i] = { element : null };

  i && (tabMap['tab' + i].left = 'tab' + (i - 1)); //??
  i < 2 && (tabMap['tab' + i].right = 'tab' + (i + 1)); //??
}

所选行的含义是什么(带有注释问号的行)?

2 个答案:

答案 0 :(得分:2)

这与以下内容相同:

for (var i = 0; i < 3; i++) {
  tabMap['tab' + i] = { element : null };

  if ( i ) {
      tabMap['tab' + i].left = 'tab' + (i - 1); //??
  }
  if ( i < 2 ) {
      tabMap['tab' + i].right = 'tab' + (i + 1); //??
  }
}

&amp;&amp;意味着如果确实如此,请检查下一个语句,这就是它放在括号中的原因。它只是上述的捷径。

答案 1 :(得分:2)

您必须了解与逻辑AND(&&)连接的表达式仅在第一个表达式求值为false(或为假值)之前进行评估。因此,以下代码表示:

  1. 评估expr1
  2. if(expr1):evaluate expr2

    expr1 && expr2;
    
  3. 在您的情况下,expr1是索引i,这意味着您的代码会转换为以下内容:

    if (i) {
        tabMap['tab' + i].left = 'tab' + (i - 1);
    }
    

    如果i大于零,则此if条件将评估为真。那么,if条件应该是什么样的:

    if (i > 0) {
        tabMap['tab' + i].left = 'tab' + (i - 1);
    }
    

    你的第二个陈述也是如此。

    我个人认为通过做一些聪明的事情来隐藏代码的含义是不好的做法,比如expr1 && expr2。如果你想要做一些事情,如果索引大于零,那么你应该这样写。我知道你没有写代码,但我只是想说出来。