Условный оператор не оценивает должным образом - PullRequest
1 голос
/ 04 мая 2019

Проблема

Я пытаюсь присвоить значение переменной с помощью условного оператора на основе строкового значения другой переменной.

код

const test = fnUserPlatform.platform === ('ps4' || 'xb1' || 'pc') ? 'p2.br.m0.weekly' : 'br.defaultsolo.current';

Когда fnUserPlatform.platform равен 'ps4', тест правильно оценивается как p2.br.m0.weekly, но когда fnUserPlatform.platform равен 'xb1' или 'pc', он оценивается как 'br.defaultsolo.current', что неверно.

Кто-нибудь знает, почему его оценивают таким образом?

Ответы [ 2 ]

4 голосов
/ 04 мая 2019

Используя это выражение,

'ps4' || 'xb1' || 'pc'

вы получаете первую строку, потому что эта строка является истинным значением и, используя логическое ИЛИ ||, это значение берется в качестве результата для этого выражения.

Если первое значение будет пустой строкой, то берется первое истинное значение

'' || 'xb1' || 'pc'
      ^^^^^

Чтобы лучше проверить, есть ли у вас элемент и некоторые значения, вы можете взять массив и проверить с помощью Array#includes.

const
    test = ['ps4', 'xb1', 'pc'].includes(fnUserPlatform.platform)
       ? 'p2.br.m0.weekly'
       : 'br.defaultsolo.current';
0 голосов
/ 04 мая 2019

Попробуйте сделать это:

const test = fnUserPlatform.platform === 'ps4' ? 'p2.br.m0.weekly' : fnUserPlatform.platform === 'xb1' ? 'p2.br.m0.weekly' : fnUserPlatform.platform === 'pc' ? 'p2.br.m0.weekly' : 'br.defaultsolo.current';
...