2015-12-23 6 views
1

Я нашел этот код Javacript, и я не могу понять, что значит иметь тернарный оператор внутри условия if.Javascript: тернарный оператор внутри условия «если»

var s = 10, r = 0, c = 1, h = 1, o = 1; 

if(s>r ? (c=5,h=2) : h=1, o>=h) 
{ 
    alert(1); 
} 

ли o >= h результат возвращается для оценки в «если» состояние? А как насчет использования запятой в состоянии «если»?

благодаря

+1

1) да; 2) присваивание от 1 до 'h'. – raina77ow

+0

Пожалуйста, прочитайте о тройных операторах в JS перед публикацией. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator – SoluableNonagon

+2

См. [Как использовать оператор?: (тройной) в JavaScript] (http://stackoverflow.com/ q/6259982/1529630) и [Что делает запятая в выражениях JavaScript?] (http://stackoverflow.com/q/3561043/1529630) – Oriol

ответ

2

Это действительно просто syntaxic укороченный. Можно расширить это в два if заявления:

var condition; 
if (s > r) { 
    c = 5; 
    condition = (h = 2); // another short-cut; it's essentially (h = 2, condition = true) 
} 
else { 
    h = 1; 
    condition = (o >= h); 
} 

if (condition) { 
    alert(1); 
} 

Использование comma позволяет превратить два заявления в один (как a, b всегда имеет значение b, хотя оба a и b подвыражения вычисляются в процессе).

+0

Хороший вопрос: какой фрагмент кода является более читаемым? Тройной оператор ярлык или этот? – enguerranws

+0

Конечно, но что вы думаете, 'h = 2' тестирует? – Andy

+0

Ничего; это всегда правдиво. Еще одно сокращение для объединения присвоения '2'' h' и установки 'condition' в' true' в одном выражении. – raina77ow

-1

Этот код не даст ошибки при запуске u ... в основном ... то, что происходит, это запустить тройную операцию, в которой он находит (c = 5, h = 2), что не является условием для записи в выражении if ..
отсюда условие не удовлетворит и оно не будет предупреждать (1);

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