与x2B之间的差异+;和+=1在javascript中

与x2B之间的差异+;和+=1在javascript中,javascript,increment,Javascript,Increment,有人能解释一下为什么下列函数给出不同的结果吗。第一个似乎不起作用,但第二个起作用。我很困惑,因为我认为+=1和++做了同样的事情 (我并不打算实际使用这段代码,它只是为了演示区别) 非常感谢您的帮助 谢谢 罗宾 [编辑:] 谢谢你的回复,现在有意义了。我还尝试了以下语句,其结果与函数1相同: return (base++) 我现在感到惊讶的是,这并没有给出与函数2相同的结果——我希望括号在返回之前“强制”对其进行求值。知道为什么不是这样吗?当您返回base++时,它会在base的值增加之前返回

有人能解释一下为什么下列函数给出不同的结果吗。第一个似乎不起作用,但第二个起作用。我很困惑,因为我认为+=1和++做了同样的事情

(我并不打算实际使用这段代码,它只是为了演示区别)

非常感谢您的帮助

谢谢

罗宾

[编辑:]

谢谢你的回复,现在有意义了。我还尝试了以下语句,其结果与函数1相同:

return (base++)

我现在感到惊讶的是,这并没有给出与函数2相同的结果——我希望括号在返回之前“强制”对其进行求值。知道为什么不是这样吗?

当您
返回base++
时,它会在base的值增加之前返回base的值。您需要执行
++base
以确保增量先发生,然后返回

否则
+
+=1


[edit]为了响应您的编辑,我尝试将随机语句括在括号中,大多数数学运算符的响应与预期一致,这种递增似乎是免税的,很可能是因为递增前和递增后的语法是非常有意的,语句本身返回一个特定值,而不管是否用括号括起来返回的是
base++
。这是后缀增量,因此,在返回后处理增量。对于这种特殊情况,
return++base将是正确的

return base++;
是增量后的。它递增base持有的值,然后返回递增发生之前的原始值

return base += 1;
将一个添加到base,然后返回base。这是一个预增量。这也可以写成:

return ++base;

我只是想澄清一下

“variable+=1”等同于“variable=variable+1”。它不是variable++的等价物


变量++之类的东西可以就地使用,前者是赋值。

在第一个函数中发生的是:

returnbase++//首先返回基值,然后递增

在第二个函数中:

返回基数+=1//在这里,先进行增量运算,然后返回变量

速记作业具有更高的优先级,即它自己完成该行的工作

return(base++)

我现在感到惊讶的是,这并没有给出与函数2相同的结果——我希望括号在返回之前“强制”对其进行求值。你知道为什么不是这样吗


将计算增量操作,而不考虑括号。这里的问题是JavaScript中的表达式总是产生一个值,然后返回该值。例如,当您执行
var x=2+2
时,将计算
2+2
,然后“返回”到
=
操作符,然后该操作符将该值分配给
x
++
后缀运算符(如
base++
中的后缀运算符)的工作方式不同:它确实会递增它前面的变量,但表达式会在递增之前返回值。另一方面,前缀递增运算符可以根据需要工作,
++base
在递增后返回值。

请小心:

x=1; y=(x++*10+1)

等于:

y=1*10+1=11

确实如此:

x=1; y=(++x*10+1)

等于:

y=2*10+1=21

要完成:

++x

x++


没有区别++
+=
对两种不同类型的字符串和数字进行变异时,会出现差异:

count
是一个字符串时,
count+=1
似乎进行类型转换并将第二个数字转换为字符串,而
count++
则接受字符串
count
参数,转换为数字并递增1

let count = process.argv[2]

while (count < 5) {
  console.log('Inside of the loop. Count is', count)
  count += 1 // NOT likely what you want! Now, try it with count++
}

console.log('Outside of loop. Count is', count)

感谢您的快速回复-请参阅底部的编辑以获取更多相关信息question@JustinNiessner事实并非如此。大多数(所有?)带有后缀符号的语言都是这样。@Luke-(Java)和(C++)可能会有所不同。贾斯汀尼斯纳说:“实际上我也这么想,直到我再次检查我不常使用的语言。也许“大多数”这个词不合适。“Some”可能更合适。你确定“base+=1;”是一个预增量而不是后增量吗?我知道这与其他答案基本上是多余的,但我希望它能帮助你理解它为什么会这样。感谢这个答案-它确实添加了有用的额外信息,说明了为什么返回x++和返回之间没有区别(x++)。谢谢-我想我明白了。所以return(x++)和return x++是一样的,因为两者都不涉及对x的赋值,所以它们都说:“返回x,然后增加1”。而return x++=1表示“将x+1赋值给x,并返回x的结果值”。@RobinL表达式
x++
返回
x
(到
return
语句,该语句从函数返回到外部)然后递增。表达式
x+=1
递增
x
,然后返回它。
let count = process.argv[2]

while (count < 5) {
  console.log('Inside of the loop. Count is', count)
  count += 1 // NOT likely what you want! Now, try it with count++
}

console.log('Outside of loop. Count is', count)
> let num = '2'
undefined
> num++
2
> num
3

// VS using +=

> let num2 = '2'
undefined
> num2 += 1
'21'
> num2
'21'