【发布时间】:2010-02-14 22:28:52
【问题描述】:
我现在正在准备 JavaScript 考试。我对 C 和 Perl 也有一点了解,所以我熟悉所有三种语言的前缀和后缀运算符。
我为它进行了在线练习考试,我犯的一个错误是在评估以下代码时:
var x = 10;
x += x--;
现在,我认为它会计算为 19,因为它是 10 + 10,然后减去 1 得到 9。但我得到的反馈是它是错误的,它实际上计算为 20。我觉得这听起来有点可疑,所以我在 HTML 文档中对其进行了测试,结果又出现了 20 个。然后我尝试了 C 和 Perl 中的等价物,并且都评估为 19。
谁能向我解释为什么 JavaScript 将答案评估为 20 而其他语言将其评估为 19?我从测试中得到的答案对我来说不是很清楚:
增量 ++ 和递减 - 可以放置运算符 在操作数之前或之后。如果增加或减少 运算符放在操作数之前,操作立即发生。 如果将递增或递减运算符放在操作数之后,则 操作数值的变化直到下一次 在程序中访问操作数。因此表达式 x += x-- 等价于 x = x + 10 计算为 20。
【问题讨论】:
-
啊,我多么讨厌这种愚蠢的“陷阱”问题!后缀递增/递减运算符不应该出现在包含另一个对被 (in|de) 递减变量的引用的表达式中。
-
在 C 中,这是未定义的行为;任何包含这个 sn-p 的代码都被破坏了
-
+=不引入序列点吗? -
@Anon: 不,它没有——语句的结尾是下一个序列点
-
啊,有道理。我已经更正了我的那部分答案。
标签: javascript c perl