2011-12-29 3 views
3

После прочтения «Шаблонов JavaScript»: «JavaScript: хорошие детали» Дугласа Крокфорда и «Столбцы JavaScript» Стояна Стеванова, я пытаюсь точно определить, что означает «чрезмерная хитрость». Они оба говорят, что это происходит при использовании либо ++, либо -- в вашем коде, но не может найти фирменное определение для этого термина, либо внутри SO, либо через поиск Google. Есть идеи?Что такое «чрезмерная хитрость»?

+6

Вот довольно продолжительная дискуссия со ссылками: http://stackoverflow.com/questions/971312/why-avoid-increment-and-decrement-operators-in-javascript – Jonathan

+0

Здесь много замечательных ответов, и я получаю это сейчас. Спасибо за помощь всем! – kaidez

ответ

5

Вы можете услышать это от самого здесь 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

Я не знаю о вас, но могу сразу сказать, что это сохраняет код в индексе 1. И я использую Python 80% времени, этот язык даже не * имеют * post/pre-increment/-decrement. Являются ли разработчики JS неспособными запомнить совершенно простой смысл этих операторов? Не то, что побочные эффекты в * сложных выражениях * не путают. Но ваш пример кажется мне очень довольным. И многие разработчики на C и C++, похоже, отлично справляются с этими операторами, несмотря на то, что их использование на C и C++ было еще сложнее из-за потенциала неопределенного поведения. – delnan

+0

Извините, это надуманный пример. Как насчет 'y + = x ++ + ++ y'? – Interrobang

+0

Это действительно сложно, я предлагаю вам использовать это вместо этого. Обратите внимание, что вышеупомянутые разработчики C и C++ согласятся, что это feindish (только отчасти потому, что это неопределенное поведение на их языках). – delnan

1

Речь идет о маленьких трюках, которые встроены. Например, avar++ является псевдонимом для avar = avar + 1.

JavaScript заполнен операторами и другими вещами, облегчающими программирование, но это всего лишь трюки. Вероятно, это он.

Кроме того, как Джонатан отметил: Why avoid increment ("++") and decrement ("--") operators in JavaScript?

+0

... кроме того, что 'var' является зарезервированным словом. ;-) – PPvG

+0

Nitpicking ... ;-) –

+1

'avar ++' is ** не ** псевдоним для 'avar = avar = avar + 1', в контексте выражений. '++ avar' есть. Preincrement изменяет значение переменной, но оценивает предыдущее значение. Может быть, Crockford * is * right ... – delnan

0

Чрезмерное trickiness субъективно. Из-за этого нет четкого определения.

Некоторые скажут, что C код строковой копии (while (*p++ = *q++);) является чрезмерно сложным, некоторые говорят, что это не так.

0

Вот довольно продолжительное обсуждение со ссылками:

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

Я думаю, что часть этой идеи в том, что при использовании этих операторов в любом месте, но с единственная переменная на одной строке, они становятся запутанными для всех, кто не находится в голове разработчика.