我在一些JS库中看到过如下代码:
var i;
for (i = 20; i >= 0; i -= 1)
{
}
我想知道为什么他们会选择以这种方式递减i
。在javascript中使用++
和--
会有问题吗?
答案 0 :(得分:5)
增量和减量运算符在JavaScript中运行良好。很多人不使用它们,因为Crockford建议不要在他的书JavaScript: The Good Parts
中使用它们。我一般都喜欢Crockford,但我确实觉得这个特别的建议有点严厉。我还没有看到任何令人信服的情况或证据表明它们是有害的。
答案 1 :(得分:3)
++
。
混淆优缺点
小心不要跟+ + + + +。这种模式可以 混乱。在它们之间插入parens以使你的意图清晰。
total = subtotal + +myInput.value;
最好写成
total = subtotal + (+myInput.value);
这样+ +就不会被误读为++。
就个人而言, - 或者++在for循环中完全没问题,因为它的含义非常明确。我倾向于遵循Crockford的大部分指导方针,因为它通常是JS惯例的基础。
查看更多here。
答案 2 :(得分:0)
我认为循环,增量和减量运算符并不是真正有害的(从我所见过的)但你不应该在循环之外使用它。
答案 3 :(得分:0)
正如其他人指出的那样,道格拉斯·克罗克福德(Douglas Crockford)不赞成将其视为语言的不良功能,尤其是在他的《 JavaScript:好的部分》一书中。它可以用于创建容易遗漏的错误和难以推理的代码。
我将在这里看不到的是我引用的道格拉斯·克罗克福德(Douglas Crockford)的一段关于JavaScript的演讲:
例如++运算符,这是为B添加的功能 算术。从那以后,我们确定了点算术是有害的, 所以我们不再这样做了。现代语言不支持点 算术。最后一种使用点算术的流行语言是 C ++。一种非常糟糕的语言,以该运算符命名。但是 操作员拒绝死亡。甚至还在我们所有的语言中 尽管我们不再需要它来增加指针。
现在,我们使用它向变量添加一个。完全是 不必要。但是我们做到了。不幸的是,这导致了一种 您尝试编写单行程序的程序。您尝试在其中 拿一大堆东西,并尝试将其涂抹成一条线。 这导致了非常糟糕的代码。很难维护的东西 很难纠正。我们已经看到安全错误,缓冲区溢出, 这些东西。该运算符总是与那些 各种安全错误。 h
我在自己的实践中发现,无论何时何地使用++, 抓住我我无法控制。这让我想拿代码 并尝试将其降低到一行。即使我知道那是一个 愚蠢的事情,我无法控制自己。这件事掌握 我,然后开始写一些愚蠢的东西,以为我真的 聪明。最终我不得不停下来。我一点都做不到。一世 必须完全停止。
从现在起,我不再说++。是+ = 1。我可以放松这简单。一世 现在就可以编写好的程序。食物味道更好。一切都 大。有一阵子我以为是我。但是现在我 每次都推荐所有人+ = 1。 + = 1很棒。 好多了。
我一直听到人们说我希望能够写x ++ 因为它意味着同一件事,而不是必须去...(模仿 我打不了...(模仿少打几下) 击键)我没有那么多时间! 除了打字 时间无关紧要。这是完全无关的。我们不花我们的 时间输入。 ++ x与x + = 1大致相同。
每次我看到有人在递增位置编写x ++时,我都必须 问这个冒号是否了解预提交和 提交后。这意味着我必须查看该程序中的每个++, 问他是否正确地做到这一点。他说对了吗? '原因 这是一个有点阅读障碍的东西,很难分辨 你把它们颠倒了。它仅会导致一次错误 一下子离开。但这足以导致错误。是真的 很难调试这些东西。
支持++的论点是它提高了可读性,这是 废话。它不会提高可读性。它改善了歧义。 它可以改善混乱,这是不希望的。
我正在重做一些代码,我看到了++ x; ++ x;那到底是怎么回事? 可能是复制和粘贴错误。除了代码 似乎在工作。更可能发生的事情是有人 做过++ x,然后其他人注意到一个问题 这里。所以他们又做了一次。如果原始代码说的是+ = 1,那么 显而易见的解决方案是+ = 2。
这提出了一个问题,为什么我们认为我们需要完全不同的东西 将一个变量添加到变量中的语法比其他每个值都多?如何 那有意义吗?答案是没有任何意义。 有一种情感上的依恋 使我们感到++的语言就是我。这是我的一部分 上午。如果您从我身边拿走++,那我是什么?还剩什么? (呜咽) 免费,采用更严格的样式,可以处理许多错误 可以自动避免。
我几乎都同意(特别是我大胆提出的主要想法),并且在任何地方都没有使用++
而不是+= 1
的想法。