对不起,基本问题。我在 javascript 中发现了以下结构,但我并不熟悉。你知道这是什么建筑吗?
我已经更改了变量,但含义是相同的。
var pt = (
5 in [1,2,3,5]?
2:
3 in [1,2,3]?
1:
7);
看起来它检查所有条件并根据条件采取行动,但是最后一步是没有条件的,像这样?
对不起,基本问题。我在 javascript 中发现了以下结构,但我并不熟悉。你知道这是什么建筑吗?
我已经更改了变量,但含义是相同的。
var pt = (
5 in [1,2,3,5]?
2:
3 in [1,2,3]?
1:
7);
看起来它检查所有条件并根据条件采取行动,但是最后一步是没有条件的,像这样?
var pt;
if (5 in [1,2,3,5]) { // is there an element with index 5 ?
pt = 2;
} else if (3 in [1,2,3]) {
pt = 1;
} else {
pt = 7;
}
但这看起来更像是一个谜题,而不是一个合法的代码。这尤其看起来像一个陷阱:
5 in [1,2,3,5]
大多数编码人员不会接受它的本质:测试 5作为键的存在(参见参考资料)。所以它是false
(但3 in [1,2,3,5]
会是true
)。
整体相当于
var pt = 7;
也许再加上几个括号,您会更好地理解。
var pt = (5 in [1,2,3,5]) ? 2 : ((3 in [1,2,3]) ? 1 : 7);
所以它基本上是一系列三元条件。它相当于:
var pt;
if(5 in [1,2,3,5])
pt = 2;
else if(3 in [1,2,3])
pt = 1;
else
pt = 7;
该代码的格式极差,但将其扩展为:
var pt;
if( 5 in [1,2,3,5]) pt = 2;
else if( 3 in [1,2,3]) pt = 1;
else pt = 7;
它只是一个以可怕变形的方式编写的三元运算符。
这是一个条件赋值,其工作方式如下:
var pt =
if 5 is in [1,2,3,5]
pt=2
else if 3 in [1,2,3]
pt=1
else pt=7
请注意in 运算符检查给定键是否在对象中,而不是值是否存在,因此5 in [1,2,3,5]
为假但0 in [1,2,3,5]
为真
写它
var pt = (5 in [1,2,3,5]?2:(3 in [1,2,3]?1:7));
使它更清楚。
这通常来自通过服务器端脚本将第一个数字 (5) 放入模板中,但 if .. then 逻辑在 JS 中处理。丑陋,但效果很好。