Javascript:Forloop i ++和(i + 1)之间的区别

时间:2015-06-22 07:43:41

标签: javascript loops for-loop

我正在构建一个javascript for循环,我想将数组的值与数组中的下一个值进行比较。

如果两个值不相等,我想返回true,否则我想返回false。

在下面的代码中,我传递字符串" aba",将其拆分并将其排序为

sortedLetters = ["a", "a", "b"]

然而,当我将sortedLetters [0](" a")与sortedLetters [1]

进行比较时

function isIsogram(str){

    // split each letter into an array and sort
    sortedLetters = str.split("").sort();

    console.log(sortedLetters[0]); // is "a"
    console.log(sortedLetters[1]); // should be "a"

    // iterate through the array and see if the next array is equal to the current
    // if unequal, return true
    for( i = 0; i < sortedLetters.length; i++ ) {
        if(sortedLetters[i] !== sortedLetters[(i+1)]) return true;
    }
    // for "a" and "a", it should return false

    return false;

};

document.write(isIsogram("aba"));

然而,为什么以下if语句有效,但上面的代码没有?

if(sortedLetters[i] !== sortedLetters[i++]) return true;

2 个答案:

答案 0 :(得分:2)

i++正在使用后增量,因此表达式i++的值是增量前变量i中的值。这段代码:

if(sortedLetters[i] !== sortedLetters[i++]) return true;

做同样的事情:

if(sortedLetters[i] !== sortedLetters[i]) return true;
i = i + 1;

由于x !== xx的任何稳定值始终为false,因此代码执行相同的操作:

if(false) return true;
i = i + 1;

您可以使用预增量版本++i,但如果在语句中增加变量,则不应在循环中增加它:

for (i = 0; i < sortedLetters.length; ) {
  if (sortedLetters[i] !== sortedLetters[++i]) return true;
}

答案 1 :(得分:1)

很简单,这个表达式中的索引是相同的:

if(sortedLetters[i] !== sortedLetters[i++]) return true;

例如,如果for循环计数器为3,它将在递增值之前评估sortedLetters[3] !== sortedLetters[3]

在for循环中使用i++也会使计数器加倍。