2016-05-17 2 views
1

Я понимаю, что делает оператор модуля. Но что делают двойные линии в «n--% 2»? Это должно быть очень просто, но я застрял.двойная горизонтальная линия перед оператором модуля

function padIt(str, n) { 
 
    while (n > 0) { 
 
    str = n-- % 2 ? '*' + str : str + '*'; 
 
    } 
 
    return str; 
 
} 
 

 
document.write(padIt("a", 10));

+0

его оператор сокращения –

ответ

2

n-- возвращает значение п, а затем уменьшает его.

var result = n-- % 2; 

эквивалентно

var result = n % 2; 
n = n - 1; 
0

Это оператор похож на тот, который вы можете быть знакомы с ++. Цель состоит в том, чтобы уменьшить значение на единицу, после возврата указанного значения. Если минусы были записаны до значения, то декремент произойдет до того, как значение будет возвращено.

var a = 12; 
console.log(--a); //=> 11 

Versus:

var a = 12; 
console.log(a--); //=> 12 
// But if you use a below this code it's value will be 11. 
0

Я думаю, что что-то не хватает из ответов до сих пор является то, что код в вопросе 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 для демонстрации

Смежные вопросы