JavaScript 中的 ++i 和 i++ 有什么区别

IT技术 javascript
2021-02-22 11:09:42

在我寻求学习和改进我的 JavaScript 的过程中,我遇到了一个带有 switch / case 语句的脚本,我注意到一些变量使用 ++ 递增,并且在 ++ 之前使用变量,然后一些变量在变量之后使用 ++。这些有什么区别?这是我试图解释的一个例子,注意 m 和 y 变量。

 switch(f){
        case 0:{

            ++m;
            if(m==12){
                m=0;
                y++;
            }
            break;
        }
        case 1:{

            --m;
            if(m==-1){
                m=11;
                y--;
            }
            break;
        }
        case 2:{

            ++y;
            break;
        }
        case 3:{

            --y;
            break;
        }
        case 4:{

            break;
        }
        }
6个回答

++ii增加后返回的值i++返回i递增前的值

当它++出现在其操作数之前时,它被称为“前增量”运算符,当它出现在它之后时,它被称为“后增量”运算符。

只有当你对结果做一些事情时,这种区别才重要。

var i = 0, j = 0;

alert(++i);  // alerts 1
alert(j++);  // alerts 0

但需要注意的一件事是,即使i++在递增之前返回值,它仍然返回转换为数字后的值。

所以

var s = "1";
alert(typeof s++);  // alerts "number"
alert(s);  // alerts 2, not "11" as if by ("1" + 1)
@Mihailo,没有区别。我倾向于根据学习编写 C++ 的习惯预先递增;过去,对于某些迭代器类型,预递增的效率更高一些。AFAICT,JS 没有区别。
2021-05-01 11:09:42
for 循环中的预增或后增对循环有影响吗?这两种情况: for (i=0; i<5; i++)vsfor (i=0; i<5; ++i)
2021-05-07 11:09:42
它们被称为前增量和后增量运算符。
2021-05-09 11:09:42

与任何其他 c 样式++增量器的区别相同

foo = ++i 是相同的:

i = i + 1;
foo = i;

foo = i++ 是相同的;

foo = i;
i = i + 1;
var i = 0;
alert('i is ' + (++i)); // i is 1

// i is now 1

var i = 0;
alert('i is ' + (i++)); // i is 0

// i is now 1

在 JS(以及 C、Perl 和其他十几种语言)中,++i 运算符评估语句之前增加 i ,而 i++评估语句之后增加它。同--。

例子:

var i=1;
alert(i++);

将显示“1”,但是:

var i=1;
alert(++i);

将显示“2”。

为了说明,假设:

var a = 1;

然后

var b = ++a;

结果是

true === (b === 2 && a === 2)

尽管

var b = a++;

结果是

true === (b === 1 && a === 2)