印象中记得以前学 C 语言的时候, 对于 i++ 和 ++i, 有一个是先增, 有一个是后增, 以至于我老觉得在 for 循环体里对某个变量进行 + 1 的时候, 总是不敢用 i++ 和 ++i, 怕会出现我以为它加了 1, 但实际上它是在下一次循环里才加了 1 的这种情况, 所以总是用 i+=1. 今天想起来这个事, 所以特地抽时间实践了一下, 才发现自己想错了, 记岔了, 哈哈. 下面记录一下 i++ 和 ++i 的区别.
Q1: 在循环体里对 i 变量进行 ++i 和 i++, 有什么区别?
A1: 来实践一下
- let a = 1
- for (let i = 0; i < 1; i++) {
- console.log(a) // 输出 1
- a++
- console.log(a) // 输出 2
- }
- let a = 1
- for (let i = 0; i < 1; i++) {
- console.log(a) // 输出 1
- ++a
- console.log(a) // 输出 2
- }
由上面两个小事例可以发现, i++ 和 ++i 在循环体里使用的效果是一样的, 都能立即对变量进行 + 1, 而无需到下一次循环时才生效, 所以我之前担心的点, 完全是瞎担心~ 同样的, 因为这样, 所以其实在循环条件里用 i++ 或是 ++i, 都不影响效果, 用哪个就看个人喜欢啦.
- for (let i = 0; i < 3; i++) {
- console.log(i)
- }
- // 0
- // 1
- // 2
- for (let i = 0; i < 3; ++i) {
- console.log(i)
- }
- // 0
- // 1
- // 2
Q2:i++ 和 ++i 在什么情况下会有差别?
A2: 在用于运算的时候会有偏差! 来看以下例子:
- let a = 1
- let b = ++a
- console.log(a) // 输出 2
- console.log(b) // 输出 2
- let a = 1
- let b = a++
- console.log(a) // 输出 2
- console.log(b) // 输出 1
由以上例子可以看出, 对于进行自增的变量来说, 是没有区别的, 但是对于被赋值的变量来说, 一个是成功赋值, 另一个却貌似只赋值到了自增之前的数值.
出现这种情况, 是因为在 JS 中 ++ 这个操作符在变量前面时, 会先对变量进行自增, 然后再将自增后的结果赋值给等号左边的变量; 当 ++ 操作符在变量后面时, 会先将变量目前的值赋值给等号左边的变量, 然后再进行自增, 总而言之一句话:
++ 在前先自增,++ 在后先赋值
Q3:i 和 ++ 之间可以有空格吗?
A3: 我们来做三个实验:1 i ++; 2 i+ +; 3 i + +
- let i = 1
- i ++
- console.log(i) // 输出 2
- let i = 1
- i+ +
- console.log(i) // 输出 1, 并且输出了一个 NaN
- let i = 1
- i + +
- console.log(i) // 输出 1, 并且输出了一个 NaN
由以上实验可得知,++ 作为一个操作符, 中间是不能存在空格的, 但是与被操作的变量之间是可以存在空格的, 这一点和其他运算符没有区别.
Q4: 出现三个 + 号怎么办?
A4: 来实践一下
- let a = 1
- let b = 0
- let c = a +++ b
- console.log(c) // 输出 1
- console.log(a) // 输出 2
- console.log(b) // 输出 0
由以上代码可得知, a 是进行了自增的, b 没有变, 所以当三个 + 连接出现时, 其实是会被解析成 let c = a++ +b, 若想得到不一样的结果, 需要我们给 + 之间增加空格, 来表达不一样的意思, 如下:
- let a = 1
- let b = 0
- let c = a + ++ b
- console.log(c) // 输出 2
- console.log(a) // 输出 1
- console.log(b) // 输出 1
结束:
以上就是关于 i++ 和 ++i 的个人总结, 虽然可以区分出他们之间的区别了, 不过在运算时最好还是少用, 因为对于代码理解不是特别友好, 尽量还是用简明一点的表达式.
来源: http://www.bubuko.com/infodetail-3113314.html