2014-01-27 4 views
2

Я искал решение для получения наибольшего простого коэффициента числа и нашел скрипт, который работает, но есть ? (Вопросительный знак) в цикле for. Мне было интересно, что делает ??Что такое "?" среднее значение в параметрах цикла for в JavaScript?

<script type="text/javascript"> 
    n=317584931803; 
    for(i=2;n>1;n%i?i++:(n/=i,document.write(i+' '))); 
</script> 

И, если вы также можете объяснить, что именно делает этот сценарий, я был бы признателен.

+1

Компоненты '?' И ':' вместе образуют условный оператор JavaScript: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator – Matt

+9

Надеюсь, что есть специальный место в аду для людей, которые пишут такой код -_- настолько нечитаемый –

+0

Это на самом деле зло. –

ответ

5

Он известен как conditional operator. В принципе, x ? y : z означает, что если x истинно, оцените и верните y, в противном случае оцените и вернемся z. Таким образом, это похоже на inline if/else.

В этом случае мы можем сломать ваш код, как это:

n=317584931803; 
for(i=2;n>1;n%i?i++:(n/=i,document.write(i+' '))); 

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

var n=317584931803; 
for (var i=2; n>1; n % i ? i++ : (n /= i, document.write(i + ' '))) { 
    // do nothing 
} 

Но это for цикл может быть записано более четко, как while цикла:

var n=317584931803, i = 2; 
while (n > 1) { 
    n % i ? i++ : (n /= i, document.write(i + ' '); 
} 

И условный оператор можно разложить на:

var n=317584931803, i = 2; 
while (n > 1) { 
    if (n % i > 0) { 
     i++; 
    } else { 
     n = n/i; 
     document.write(i + ' '); 
    } 
} 
4

Вызванное Conditional Operator (?:)

Полное Выражение

test ? expression1 : expression2 

Вот если test условие истинно, expression1 будет оцениваться иначе expression2

Это ваше выражение

n % i ? i++ : (n /= i, document.write(i + ' ')) 
+1

Ding ! '+ 1' :-). – qwertynl

+2

Пожалуйста, ** остановите **, называя это «тройным» оператором. – zerkms

+0

@zerkms Но это трёхмерный оператор http://en.wikipedia.org/wiki/%3F%3A –

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