2016-12-03 8 views
2

Проделав этоНазначения от троичного оператора игнорирует Оставшееся выражение

const bool = true; 
const a = 2 + true ? 3 : 0; 
const b = 2 + false ? 3 : 0; 

дает мне a = 3 и b = 0. Почему игнорируется 2 +?

+0

'2 + ложь? 3: 0' оценивается в 3, а не 0. – RobG

+0

Какой желаемый выход? и каково использование переменной bool? –

ответ

2

Это связано с Operator старшинства https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

Как вы можете видеть в этой таблице, добавление (+) имеет больший приоритет, чем условный (?). Это делает компилятор читать так:

(2 + true) ? 3 : 0 

2 + true будет оценивать в первую очередь. Как это truthy значение, то результат будет 3. Если вы хотите изменить поведение по умолчанию оператора старшинства, то вам нужно добавить скобки:

2 + (true ? 3 : 0) 
1

попробовать писать так:

// если желаемый выход а = 5 и б = 2

const a = 2 + (true ? 3 : 0); 
const b = 2 + (false ? 3 : 0;); 
0

const bool = true; 
 
const a = 2 + true ? 3 : 0; 
 
const b = 2 + false ? 3 : 0; 
 

 
console.log(a); 
 
console.log(b);

https://jsfiddle.net/74ds0der/

Код вы написали: a = 3, b = 3. Проверьте jsfiddle link.

0

Почему 2 + игнорируется?

Это не так. Приведено:

2 + true ? 3 : 0; 

во-первых 2 + true оценивается. Так как является числом, то + рассматриваются как дополнение и истинный принуждаются к числу 1, результат равен 3.

Затем ? причинам 3, чтобы быть принуждены к булева истинного так что, 3:0 возвращается 3.

Во втором выражении:

  • ложным оценивает до 0
  • 2 + 0 принимает значение 2
  • 2? оценивается как true, поэтому возвращается значение 3.

Дано:

const b = 2 + false ? 3 : 0; 

б присваивается значение 3.

 Смежные вопросы

  • Нет связанных вопросов^_^