【发布时间】:2016-03-09 18:34:39
【问题描述】:
我知道后缀/前缀递增/递减运算符的作用。而在 javascript 中,这似乎没有什么不同。
虽然我可以很容易地猜到这一行的结果:
var foo = 10; console.log(foo, ++foo, foo, foo++, foo);
// output: 10 11 11 11 12
++ 运算符出现在单独的表达式中。
因为这些运算符出现在同一个表达式中,所以有点复杂:
var foo = 10; console.log(foo, ++foo + foo++, foo);
// output[1]: 10 22 12
// Nothing unexpected assuming LTR evaluation
var foo = 10; console.log(foo, foo++ + ++foo, foo);
// output[2]: 10 22 12
// What? Ordering is now different but we have the same output.
// Maybe value of foo is evaluated lazily...
var foo = 10; console.log(foo, foo + ++foo, foo);
// output[3]: 10 21 11
// What?! So first 'foo' is evaluated before the increment?
我的问题是,Javascript(在这种情况下是 V8,因为我在 Chrome 中测试了这些)最终如何以不同的方式评估第二个和第三个示例中的加法表达式?
为什么foo 最终的评估结果与foo++ 不同。后缀 ++ 不应该在表达式之后递增,并在表达式内计算为 foo 吗?
【问题讨论】:
-
我相信您所描述的行为表明,在 javascript 中,加法是左关联。这意味着首先计算
left_expression + right_expression中的左表达式。我相信,增量运算符的行为方式符合您的预期。
标签: javascript increment operator-precedence