Страницы

Поиск по вопросам

среда, 5 февраля 2020 г.

Java script использование нескольких тернарных операторов (специфический случай)

#javascript


В тесте столкнулся с такой ситуацией:

     var y=10;
     var z=3;
     var x=(y%5>0)?(z==3)? z*2 : y+3 :(z<3)? y-z :z++;
     console.log(x); // 3


Подскажите какова последовательность вычислений в такой строке. Спасибо!
    


Ответы

Ответ 1



Если в самом последнем условии прописать ++z, то x будет равен 4

Ответ 2



Двоеточие всегда относится к последнему перед ним вопросительному знаку. Последовательность действий следующая: x= y%5>0 ? ( z==3 ? z*2 : y+3 ) : ( z<3 ? y-z : z++ ) ;

Ответ 3



Здесь вы можете найти подробный разбор выполнения тернарных операторов в различных языках программирования, в том числе и в javascript. Порядок в js простой и логичный: сначала проверяется самое левое условие. Если оно верно, то выполняется и возвращается левая часть после первого двоеточия, если не верно, то правая. Следует отдельно уточнить, что операторы выполняются справа налево. В приведенном вами примере выполнение можно представить примерно такими шагами: (y%5>0)?(z==3)? z*2 : y+3 :(z<3)? y-z :z++; //исходный код false ? true ? z*2 : y+3 : false ? y-z : z++ //выполнили скобки //теперь можно выделить три отдельных тернарных оператора: //(false ? (true ? z*2 : y+3) : (false ? y-z : z++)) //выполняем их справа налево false ? true ? z*2 : y+3 : z++ false ? z*2 : z++ z++ //так как здесь постинкремент - получаем просто "3"

Комментариев нет:

Отправить комментарий