Как разобрать выражение js

301
18 марта 2017, 02:16

Как работает эта странная конструкция на js ?

10 > 1 ? 15 < 2 ? 7 > 3 ? 'variant 1' : 'variant 2' : 'variant 3' : 'variant 4'
Answer 1

Это тернарный оператор, более лёгкая форма обычного if{}else{}, однако возвращает истинное значение:

a = 2 > 5 ? 'o_O' : true; // a === true

В Вашем случае, операторы просто вложены (не рекомендуется так делать, тяжело для чтения).
Можно переписать так:

if (10 > 1) { // true, we need to go deeper 
  if (15 < 2) { // false, go to else statement 
    if (7 > 3) { 
      console.info('variant 1'); 
    } else { 
      console.info('variant 2'); 
    } 
  } else { // Execute! 
    console.info('variant 3'); 
  } 
} else { 
  console.info('variant 4'); 
}

Answer 2

Как я понимаю из грамматики JavaScript, то каждое подвыражение за исключением начального условия условного оператора в свою очередь может включать условный оператор

Поэтому данное выражение

10 > 1 ? 15 < 2 ? 7 > 3 ? 'variant 1' : 'variant 2' : 'variant 3' : 'variant 4'

можно представить как цепочку вложенных условных операторов

10 > 1 ? ( 15 < 2 ? ( 7 > 3 ? 'variant 1' : 'variant 2' ) : 'variant 3' ) : 'variant 4'

В результате значением выражения будет строка 'variant 3'

Answer 3

Сначала отформатировать по-человечески

10 > 1 
  ? 15 < 2
    ? 7 > 3
      ? 'variant 1'
      : 'variant 2'
    : 'variant 3'
  : 'variant 4'

а потом читать так же, как вложенные if-else:

if (10 > 1)
  if (15 < 2)
    if (7 > 3)
      return 'variant 1'
    return 'variant 2'
  return 'variant 3'
return 'variant 4'
READ ALSO
Добавление меток Я.карт по дата атрибутам

Добавление меток Я.карт по дата атрибутам

Есть несколько блоков с дата-атрибутами, значение которых являются координатыНужно перебрать все блоки у которых есть эти дата-атрибуты...

327
Js сформировать параметр

Js сформировать параметр

Как сформировать такой параметр 'status' : 1 в переменную get? Сейчас $_POST выглядит так

206
Как имитировать заход на сайт

Как имитировать заход на сайт

Допустим есть сайт, я там зарегистрирован:

418
Как создать кнопку "Откликнуться через LinkedIn

Как создать кнопку "Откликнуться через LinkedIn

Добрый деньНа это странице на вакансию можно откликнуться через LinkedIn

271