【发布时间】:2011-12-24 22:06:20
【问题描述】:
如果我从 Crockford 的“Javascript: The Good Parts”中没记错的话,他不赞成使用 ++ 或 -- 运算符,但我也倾向于回忆他没有提供反对他们的特别有力的论据。
下面是这些运算符的使用,我发现它们有助于使我的代码尽可能简洁,特别是在处理返回 -1 的函数/方法时,当 0 是第一个可能的有效返回值(以及正整数) .我会对 ++ 和/或的其他非典型用法感兴趣——它们强烈支持在有意义时使用这些运算符。
我确实不认为这是Why avoid increment ("++") and decrement ("--") operators in JavaScript? 的重复,而是它的必然结果:何时不避免它们,而是利用它们为你带来优势。当然,我可能会弄错,并且可能有某种原因我没有想到为什么以下内容充满危险,尽管在我看来很优雅——如果我错过了以下内容的次优,我我也想知道
var substrIdx = str.indexOf(substr);
if (++substrIdx) {
doSomething(--substrIdx);
}
【问题讨论】:
-
看过 Crock 几次演讲后,我很确定我可以准确地想象他对那个例子的反应 :-)
-
您的示例不太合理:
substr()返回一个字符串,而不是索引;它适用于indexOf()。但无论如何,虽然我一般喜欢递增和递减运算符,但我不喜欢这种用法,因为它更难阅读。任何其他人看到您的代码都必须停下来思考它是如何工作的(尤其是如果您不包含注释),而if (substrIdx != -1)是显而易见的。 -
Crockford 声明“我们不需要专门的运算符来添加一个对象”。我同意。
-
P.S.如果在使用
substrIdx的 if 块之后有代码怎么办 - 目前该值仅在 if 评估为 true 时才会更改回来。更一般地说,虽然我们不需要需要一个专门的运算符,但它确实存在并且每个人都知道它的含义,那么为什么不使用它(但不要以混淆代码的方式)? -
Crockford 关于不需要这些是正确的。事实上,如果不是因为 PDP-8 有前置和后置增量指令,C 就永远不会有,而且没有任何 C 派生语言(ie,一切都在除了 LISP 方言和 COBOL 之外的当前使用)也可以。
标签: javascript operators increment decrement pre-increment