Почему логическое ИЛИ работает по-другому, если изменение порядка содержит терминальный оператор - PullRequest
2 голосов
/ 30 мая 2019

Почему приведенный ниже код дает разные результаты?

var test;

var output = test ? 'Test' : 'No Test' || true;
var output2 = true || test ? 'Test' : 'No Test'

console.log(output); // No Test
console.log(output2); // Test

Ответы [ 2 ]

5 голосов
/ 30 мая 2019

Из-за приоритет оператора . Условный оператор имеет приоритет 4, в то время как логическое ИЛИ имеет приоритет 5, поэтому ваш код эквивалентен:

var test;

var output = test ? 'Test' : ('No Test' || true);
//      undefined ? 'Test' : 'No Test'
var output2 = (true || test) ? 'Test' : 'No Test'
//                      true ? 'Test' : 'No Test'

console.log(output);
console.log(output2);

Группировка OR имеет более высокий приоритет - окружающие ее токены сначала группируются.

0 голосов
/ 30 мая 2019
var output2 = true || test ? 'Test' : 'No Test'

в этом коде, который вы использовали true, поэтому он напечатал Test ваш условный оператор здесь получил значение true

var output2 = test ? 'Test' : 'No Test'

, если вы пытались какэто он напечатает No Test

var test;

var output = test ? 'Test' : 'No Test' || true;
var output2 = test ? 'Test' : 'No Test'

console.log(output); // No Test
console.log(output2); // Test
...