Нужно уточнить, используя 0 с троичным оператором

Я читаю исходники, написанные в игре. Некоторые строки написаны следующим образом:

0 ? player.y > global.screenHeight/2 : global.screenHeight/2 - player.y

Предположим, что player это спрайт с позицией и global это просто импорт из других файлов, который содержит некоторые свойства. Что делает приведенный выше код? Я думал, что троичный оператор будет примерно таким:

c ? a : b 

где a а также b того же типа и c это условие.

Но демо-версия игры проходит гладко, поэтому приведенный выше код должен быть в порядке. Я просто не понимаю смысл кода.

Код извлечен отсюда:
https://github.com/huytd/agar.io-clone/blob/master/src/client/js/app.js

3 ответа

В вышеприведенном троичном утверждении 0 это условие.

Потому что Javascript лечит 0 как falsy, заявление оценивается так, как если бы оно было записано как:

false ? player.y > global.screenHeight/2 : global.screenHeight/2 - player.y

Следовательно, global.screenHeight/2 - player.y будет возвращен.

Возможно, автор поместил троичную комбинацию там, чтобы действовать как выключатель. Заменив 0 с 1 троичное заявление вернется player.y > global.screenHeight/2 вместо.

0 ? player.y > global.screenHeight/2 : global.screenHeight/2 - player.y

Здесь 0 ложно, поэтому global.screenHeight/2 - player.y будет всегда исполняться

c ? a : b

a а также b можно оценить значения любого типа, и c будет оценивать true или же false,

0 будет оценивать false, "б" будет работать: global.screenHeight/2 - player.yЭто произойдет независимо от чего-либо еще - первое выражение никогда не запустится.

Если бы мне пришлось угадывать, почему это там, я бы сказал, что это может быть заполнитель для запланированной функции или улучшения (однако я, очевидно, не могу знать наверняка).

Другие вопросы по тегам