Javascript 为什么在Chrome调试器中悬停会修改变量而不是计算表达式?

Javascript 为什么在Chrome调试器中悬停会修改变量而不是计算表达式?,javascript,google-chrome,type-conversion,google-chrome-devtools,Javascript,Google Chrome,Type Conversion,Google Chrome Devtools,所以我有这个代码: var a = 3; debugger; console.log(a += a > 2) 现在不管出于什么原因(某种类型的强制正在发生,我在本例中并不太熟悉),布尔表达式与增量运算符结合,将a增加1 但是,当我在chrome调试器中悬停(a+=a>3)时,它实际上会运行该操作。因此,如果我将鼠标悬停在该部件上5次,它将实际运行该操作5次。正常运行时的输出不是4,我将得到8,因为我在它上面悬停了五次 为什么它不只运行一次操作并检查作为该单一操作结果的值?如果我将一个代码

所以我有这个代码:

var a = 3;
debugger;
console.log(a += a > 2)
现在不管出于什么原因(某种类型的强制正在发生,我在本例中并不太熟悉),布尔表达式与增量运算符结合,将a增加1

但是,当我在chrome调试器中悬停(a+=a>3)时,它实际上会运行该操作。因此,如果我将鼠标悬停在该部件上5次,它将实际运行该操作5次。正常运行时的输出不是4,我将得到8,因为我在它上面悬停了五次


为什么它不只运行一次操作并检查作为该单一操作结果的值?如果我将一个代码块悬停1000次,它是否应该只输出该代码块的结果,就好像它只运行了一次一样?

现在,您已经暂停了针对该代码运行的VM。您暂停了时间并正在查看状态。通过突出显示在该状态下执行该代码的操作,查看它将如何计算。然后,由于这段代码就是这样做的,所以a成为VM内执行的结果。这会在导致再次执行时执行多次。然后,在执行过程中向前推进时,您刚才暂停的相同状态被向前拉

希望这是一个直截了当的答案,说明系统为什么会这样运行


至于为什么要添加1,Johan关于将添加的
true
转换为
1
的评论非常贴切。这是JavaScript弱键入系统的一部分。

我无法让最新版本的Chrome在鼠标上方运行表达式。关于
a
增加的原因:似乎
true
转换为一个等于
1
的数字,即
+true==1
。所以你得到的是
a+=1
Mouseover应该高亮显示。突出显示区域将执行其中的操作。