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