Я думаю, что что-то не хватает из ответов до сих пор является то, что код в вопросе OP является на самом деле довольно изысканный, потому что он использует order of operations для объединить убыли и сравнение в той же строке. Поскольку это постфиксный декремент, декремент не происходит до тех пор, пока не будет оценен оператор модуля.
Оба они будут возвращать то же значение:
n=10;
n % 2; //0
---------------
n=10;
n-- % 2; //0
Но что делает этот префикс убыли, или с помощью круглых скобок, чтобы заставить постфикс decrementer оценить первый изменит результат:
n=10;
--n % 2; // 1
---------------
n=10;
(n--) % 2; // 1
Более подробный способ переписать функцию в вопросе ОП будет
function padIt(str, n) {
while (n > 0) {
str = n % 2 ? '*' + str : str + '*';
n = n - 1; // This is the decrementer fully written out
}
return str;
}
Нет, он значительно не удлиняет код, но он сохраняет дополнительную строку. Но более того, просто здорово найти умные маленькие трюки, подобные этому. Приветствую автора этой функции!
FIDDLE для демонстрации
его оператор сокращения –