【问题标题】:What is "excessive trickness"?什么是“过度欺骗”?
【发布时间】:2012-01-29 20:01:06
【问题描述】:

在阅读了 Douglas Crockford 的“JavaScript: The Good Parts”和 Stoyan Stevanov 的“JavaScript Patterns”之后,我试图确定“过度狡猾”的确切含义。他们都说在您的代码中使用++-- 时会发生这种情况,但无论是在SO 中还是通过Google 搜索都找不到该术语的确切定义。有什么想法吗?

【问题讨论】:

标签: javascript terminology


【解决方案1】:

这是关于内置的小技巧。例如,avar++avar = avar + 1 的别名。

JavaScript 充满了运算符和其他使编程更容易的东西,但它们只是技巧。他大概就是这个意思。

另外,正如乔纳森指出的那样:Why avoid increment ("++") and decrement ("--") operators in JavaScript?

【讨论】:

  • ...除了 var 是保留字。 ;-)
  • 在表达式上下文中,avar++ 不是 avar = avar = avar + 1 的别名。 ++avar 是。 Preincrement 更改变量的值,但计算为先前的值。也许克罗克福德对的......
【解决方案2】:

过度狡猾是主观的。因此,它没有一个明确的定义。

有人会说 C 著名的字符串复制代码 (while (*p++ = *q++);) 过于棘手,有人会说不是。

【讨论】:

    【解决方案3】:

    您可以从 Crockford 本人那里听到:http://www.youtube.com/watch?feature=player_detailpage&v=47Ceot8yqeI#t=4140s

    简单的答案是++-- 作用于一个变量,并且通常在您对该变量执行其他操作的同时执行此操作。例如,您能快速决定这是做什么的吗?

    y += x++ + ++y; // what is y now?
    

    更多 StackOverflow 讨论:Why avoid increment ("++") and decrement ("--") operators in JavaScript?

    【讨论】:

    • 我不了解你,但我可以立即告诉你,这会保存到索引 1 处的代码。而且我 80% 的时间都使用 Python,该语言甚至没有 post-/pre-increment/-decrement。 JS 开发者是否无法记住这些运算符的完美简单含义?并不是说复杂表达式 中的副作用不会令人困惑。但是你的例子对我来说似乎很人为。许多 C 和 C++ 开发人员似乎与这些运算符相处得很好,尽管由于潜在的未定义行为,在 C 和 C++ 中正确使用它们更加困难。
    • 对不起,这是一个人为的例子。 y += x++ + ++y 怎么样?
    • 这确实很棘手,我建议你改用它。请注意,前面提到的 C 和 C++ 开发人员会同意这是 feindish(仅部分是因为它在他们的语言中是未定义的行为)。
    【解决方案4】:

    这是一个相当长的讨论链接:

    Why avoid increment ("++") and decrement ("--") operators in JavaScript?

    我认为部分想法是,当在任何地方使用这些运算符时,但在一行上只有一个变量时,它们会让开发人员以外的任何人感到困惑。

    【讨论】:

      猜你喜欢
      • 2016-05-20
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      相关资源
      最近更新 更多