这样做分配忽略剩余表达
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 +
被忽略?
它与运算符优先级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和B = 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链接。
为什么是2 +被忽略?
不是。鉴于:
2 + true ? 3 : 0;
首先2 + true
进行评估。由于是一个数,该+
被视为加法和真被强制为数字1,结果为3。
然后?
原因3被强制为布尔真这样的3:0
3返回。
在第二个表达式:
考虑:
const b = 2 + false ? 3 : 0;
b分配值3
'2 +假的? 3:0'评估为3,而不是0。 – RobG
什么是期望的输出?以及bool变量的用法是什么? –