Проделав этоНазначения от троичного оператора игнорирует Оставшееся выражение
const bool = true;
const a = 2 + true ? 3 : 0;
const b = 2 + false ? 3 : 0;
дает мне a = 3
и b = 0
. Почему игнорируется 2 +
?
Проделав этоНазначения от троичного оператора игнорирует Оставшееся выражение
const bool = true;
const a = 2 + true ? 3 : 0;
const b = 2 + false ? 3 : 0;
дает мне a = 3
и b = 0
. Почему игнорируется 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)
попробовать писать так:
// если желаемый выход а = 5 и б = 2
const a = 2 + (true ? 3 : 0);
const b = 2 + (false ? 3 : 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.
Почему 2 + игнорируется?
Это не так. Приведено:
2 + true ? 3 : 0;
во-первых 2 + true
оценивается. Так как является числом, то +
рассматриваются как дополнение и истинный принуждаются к числу 1, результат равен 3.
Затем ?
причинам 3, чтобы быть принуждены к булева истинного так что, 3:0
возвращается 3.
Во втором выражении:
Дано:
const b = 2 + false ? 3 : 0;
б присваивается значение 3.
'2 + ложь? 3: 0' оценивается в 3, а не 0. – RobG
Какой желаемый выход? и каково использование переменной bool? –