#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"
Комментариев нет:
Отправить комментарий