Javascript三元运算符结果

Arn*_*nab 6 javascript ternary-operator

我正在使用C#编译javascript块的小实用程序.我试图了解三元运算符的执行流程.现在,当我使用Chrome或Firefox运行JavaScript时:

var k = 27;
var o = 78;
var a = k < 100 ? o+=2 > 11 ? "T" : "F" : o < 100 ? "J" : "P";
alert(a);
Run Code Online (Sandbox Code Playgroud)

如果"o + = 2"返回false,它应该给我结果"T""F".但不是那些它返回"78F".任何人都可以向我解释它背后的逻辑.

Raj*_*amy 9

基于运算符优先级表:

赋值运算符的优先级低于比较运算符.

所以你的代码将被评估如下,

  1. var a = k <100?o + = 2> 11?"T":"F":o <100?"J.P";
  2. var a = true?o + = 2> 11?"T":"F":o <100?"J.P";
  3. var a = true?o + = false?"T":"F":o <100?"J.P";
  4. var a = true?o + = "F":o <100?"J.P";
  5. var a = true"78F":o <100?"J.P";
  6. var a = "78F"

您可以通过使用括号对条件进行分组来纠正行为,

var a = (k < 100) ? (o+=2) > 11 ? "T" : "F" : (o < 100) ? "J" : "P";
console.log(a); // T
Run Code Online (Sandbox Code Playgroud)