Javascript 三元运算结果
Javascript ternary operator result
我正在制作使用 C# 编译 javascript 块的小工具。我试图了解三元运算符的执行流程。现在,当我 运行 a javascript 使用 Chrome 或 Firefox 时:
var k = 27;
var o = 78;
var a = k < 100 ? o+=2 > 11 ? "T" : "F" : o < 100 ? "J" : "P";
alert(a);
它应该给我结果 "T" 或者 "F" 如果 "o+=2" returns 错误。但不是那些 returns "78F"。谁能解释一下背后的逻辑是什么。
Assignment operators has less priority than a comparison operator.
所以你的代码将被评估如下,
- var a = k < 100 ? o+=2 > 11 ? "T" : "F" : o < 100 ? "J" : "P";
- var =
true
? o += 2 > 11 ? "T" : "F" : o < 100 ? "J" : "P";
- var =
true
? o += false
? "T" : "F" : o < 100 ? "J" : "P";
- var =
true
? o += "F"
: o < 100 ? "J" : "P";
- var =
true
? "78F"
: o < 100 ? "J" : "P";
- var =
"78F"
您可以通过使用括号对条件进行分组来更正此行为,
var a = (k < 100) ? (o+=2) > 11 ? "T" : "F" : (o < 100) ? "J" : "P";
console.log(a); // T
您正在 o
上使用 +=
,而不仅仅是 +
。
var a = k < 100 ? o+2 > 11 ? "T" : "F" : o < 100 ? "J" : "P";
同时使用括号会使其更具可读性:
var a = (k < 100 ? (o+2 > 11 ? "T" : "F") : (o < 100 ? "J" : "P"));
var k = 27;
var o = 78;
var a = k < 100 ? (o+=2) > 11 ? "T" : "F" : o < 100 ? "J" : "P";
alert(a);
以上代码按您的预期工作。
您可能认为 +=
运算符将首先被处理。
这实际上是这样工作的
k < 100 ? o += (2 > 11 ? "T" : "F") : (o < 100 ? "J" : "P");
因为赋值运算符 =
右侧的任何内容都先处理,从左到右的顺序,所以 2 > 11 ? "T" : "F"
首先计算
我正在制作使用 C# 编译 javascript 块的小工具。我试图了解三元运算符的执行流程。现在,当我 运行 a javascript 使用 Chrome 或 Firefox 时:
var k = 27;
var o = 78;
var a = k < 100 ? o+=2 > 11 ? "T" : "F" : o < 100 ? "J" : "P";
alert(a);
它应该给我结果 "T" 或者 "F" 如果 "o+=2" returns 错误。但不是那些 returns "78F"。谁能解释一下背后的逻辑是什么。
Assignment operators has less priority than a comparison operator.
所以你的代码将被评估如下,
- var a = k < 100 ? o+=2 > 11 ? "T" : "F" : o < 100 ? "J" : "P";
- var =
true
? o += 2 > 11 ? "T" : "F" : o < 100 ? "J" : "P"; - var =
true
? o +=false
? "T" : "F" : o < 100 ? "J" : "P"; - var =
true
? o +="F"
: o < 100 ? "J" : "P"; - var =
true
?"78F"
: o < 100 ? "J" : "P"; - var =
"78F"
您可以通过使用括号对条件进行分组来更正此行为,
var a = (k < 100) ? (o+=2) > 11 ? "T" : "F" : (o < 100) ? "J" : "P";
console.log(a); // T
您正在 o
上使用 +=
,而不仅仅是 +
。
var a = k < 100 ? o+2 > 11 ? "T" : "F" : o < 100 ? "J" : "P";
同时使用括号会使其更具可读性:
var a = (k < 100 ? (o+2 > 11 ? "T" : "F") : (o < 100 ? "J" : "P"));
var k = 27;
var o = 78;
var a = k < 100 ? (o+=2) > 11 ? "T" : "F" : o < 100 ? "J" : "P";
alert(a);
以上代码按您的预期工作。
您可能认为 +=
运算符将首先被处理。
这实际上是这样工作的
k < 100 ? o += (2 > 11 ? "T" : "F") : (o < 100 ? "J" : "P");
因为赋值运算符 =
右侧的任何内容都先处理,从左到右的顺序,所以 2 > 11 ? "T" : "F"
首先计算