我有一个全局变量,我用三种不同的方法修改。它从0开始,一个方法加3,下一个加2,最后一个加1.它们都与自己的按钮相关。
当我点击“加1”按钮时,计数器保持为0,我需要再按一次才能将其设置为1.有趣的是,如果我从另外两个按钮开始,计数器会相应地动作但是如果我点击我的“加号”再次使用1“按钮,它需要两次推动并且行为怪异,就好像它正在按住添加...
public void addThreeForTeamB(View view) {
displayForTeamB(scoreTeamB += 3);
}
public void addTwoForTeamB(View view) {
displayForTeamB(scoreTeamB += 2);
}
public void addOneForTeamB(View view) {
displayForTeamB(scoreTeamB ++);
}
所以这就是它的管理方式,很酷的是,当我将最后一个方法更改为“scoreTeamB + = 1”时,它会按原样运行,只是添加而不会发生冲突。
我的问题是关于这两个运算符之间的区别,以便更好地理解在同一个变量上使用这2个运算符时产生的轻微差异背后的原因。
答案 0 :(得分:10)
scoreTeamB++
返回变量的先前值(在增加之前)。 +=
返回分配给变量的值。
如果您将scoreTeamB++
替换为++scoreTeamB
或scoreTeamB +=1
,您将获得变量的新值(递增值)。
答案 1 :(得分:0)
要使此代码按预期工作,您应该使用前缀++运算符而不是后缀。 Prefix ++运算符(以及 - 运算符,显然)返回递增的值,而postfix运算符++在递增之前返回变量的值。
这些可以像这样实现:
function differenceInDays(d0, d1) {
// Copy dates so don't affect originals
d0 = new Date(+d0);
d1 = new Date(+d1);
// Set to noon
d0.setHours(12,0,0,0);
d1.setHours(12,0,0,0);
// Get difference in whole days, divide by milliseconds in one day
// and round to remove any daylight saving boundary effects
return Math.round((d1-d0) / 8.64e7)
}
// Difference between 2015-11-12T17:35:32.124 and 2015-12-01T07:15:54.999
document.write(differenceInDays(new Date(2015,10,12,17,35,32,124),
new Date(2015,11,01,07,15,54,999)));