Ответ 1
Потому что у Дугласа Крокфорда есть собственное мнение о том, что может быть чем-то запутанным. Они подходят для использования, JSLint просто прогнозирует его мнение.
Возможный дубликат:
Зачем избегать операций increment ( "++" ) и decment ( "-" ) в JavaScript?
Я слышал в нескольких местах, что не рекомендуется использовать ++ и - в javascript, и вместо этого мы должны использовать + = 1 или - = 1. Кто-нибудь может объяснить, почему для меня?
Потому что у Дугласа Крокфорда есть собственное мнение о том, что может быть чем-то запутанным. Они подходят для использования, JSLint просто прогнозирует его мнение.
Если у меня есть противоположное предложение...?
Пожалуйста, используйте операции increment (++) и decment (-), когда сможете. Гораздо проще. (И то, что они там для.)
Единственный раз, когда я видел, что эти операторы обескуражены, находилось в Дуглас Крокфорд JavaScript: The Good Parts.
Цитата из приложения "Плохие детали":
Операторы приращения и декремента позволяют писать в чрезвычайно сложном стиле. В таких языках, как C, они позволяют писать однострочные, которые могут выполнять строковые копии:
for (p = src, q = dest; !*p; p++, q++) *q = *p;
Они также поощряют стиль программирования, который, как оказалось, безрассуден. Большинство ошибок переполнения буфера, которые создавали ужасные уязвимости безопасности, были вызваны таким кодом.
В моей собственной практике я заметил, что когда я использовал
++
и--,
, мой код имел тенденцию быть слишком тугим, слишком загадочным. Поэтому, в качестве дисциплины, я больше не использую их. Я думаю, что в результате мой стиль кодирования стал более ясным.
Кроме того, цитируя JSLint документацию (инструмент качества кода, который он написал):
Известно, что операторы
++
(increment) и--
(декременты) вносят вклад в плохой код, поощряя чрезмерную хитрость. Они уступают только ошибочной архитектуре, позволяя вирусам и другим угрозам безопасности. Существует опция plusplus, которая запрещает использование этих операторов.
Он действительно не любит этих операторов... Но давай! Я думаю, что мы все еще можем использовать операторы ++
и --
без написания загадочного кода. Я использую их, и они мне нравятся. Каждый использует их.
Обратите внимание, что хотя JSLint имеет возможность запретить эти операторы, эта опция по умолчанию не включена.
Причина, по которой Crockford et al. препятствует использованию ++
/--
в том, что они вводят побочные эффекты. Практически нет причин использовать i+=1;
вместо i++;
, потому что оба являются одинарными операторами, но есть множество причин, по которым оператор делает только одно, а ++
позволяет легко нарушить это правило.
Отказ от использования ++
означает, что нам не нужно держать различие между i++
и ++i
в наших головах. Это означает, что мы с меньшей вероятностью будем пытаться использовать их умными, но путаными способами. Хорошая практика не использовать их, imo, по этим причинам.
Единственная причина, по которой я могу думать, заключается в том, что ваш Javascript, скорее всего, будет отредактирован идиотом, чем любой другой код, который вы пишете (html??).
Итак, для noob,
x=x+1 ;
более читабельна, чем
x++;
При работе с опытными программистами это действительно не имеет значения.
Использование ++
/--
может ограничить параметры js minification, поскольку их значение очень чувствительно к пробелу. В зависимости от minifier он может даже ввести ошибки в рабочий код. Крокфорд объясняет (в разделе "Предостережение" ) здесь.
Единственная веская причина, о которой я могу думать, - это ясность. Вам не нужно беспокоиться о следующей ситуации:
var result = ++i;
Или:
var result = i++;
использовать ++, является стандартным и иметь хорошую ситуацию с тем, чтобы быть там.