逻辑运算符&&在if语句中

时间:2014-05-14 01:22:59

标签: javascript arrays

我在迭代一个数组并希望执行以下操作:

for (
    var i = 0; 
    i < array.length && !(array[i][1] == 0 && array[i][2] == 'foo'); 
    i++) 
{

所以基本上我说&#34;如果我小于数组的长度而且数组[i] 1为0并且数组[i] [2]不正确]是&#39; foo&#39;&#34;然后做一堆东西。

但它不起作用。当array [i] [2]为&#39; foo&#39;时,它总是计算为false,即使array [i] [1]不等于0。

奇怪的是,如果我做这样的for语句:

for (var i = 0; i < array.length; i++) {

...然后把它放在循环的开头:

if (array[i][1] == 0 && array[i][2] == 'foo') continue;

......它有效。因此,当我试图说&#34;如果正确和!(条件1和&amp;&amp;条件2)&#34;那么我必须以某种方式弄乱语法。但我不确定自己做错了什么。我的错误在哪里?

2 个答案:

答案 0 :(得分:2)

如果将测试!(array[i][1] == 0 && array[i][2] == 'foo')放在循环控制表达式中,那么当失败时,循环会停止。它不会跳过该迭代并继续下一个迭代,而不是i < array.length为假。它就此停止。

如果您希望它继续下一次迭代,您需要将测试放在循环体中并使用continue

答案 1 :(得分:0)

  

所以基本上我说&#34;如果我小于数组的长度而且数组[i] 1为0并且数组[i] [2]不正确]是&#39; foo&#39;&#34;然后做一堆东西。

在javascript中是:

if((i < array.length) && !(array[i][1] == 0) && (array[i][2] == 'foo'))

如果我使用了for循环中的代码,则if语句将为:

if(i < array.length && !(array[i][1] == 0 && array[i][2] == 'foo'))

请注意!之后括号的位置。带有变化的完整for循环将是:

for (var i = 0; (i < array.length) && !(array[i][1] == 0) && (array[i][2] == 'foo'); i++) {