2

对不起,基本问题。我在 javascript 中发现了以下结构,但我并不熟悉。你知道这是什么建筑吗?

我已经更改了变量,但含义是相同的。

var pt = (
 5 in [1,2,3,5]?
 2:
 3 in [1,2,3]?
 1:
 7);

看起来它检查所有条件并根据条件采取行动,但是最后一步是没有条件的,像这样?

4

5 回答 5

6

这使用三元条件运算符in 运算符。可以这样写:

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;
于 2013-11-09T17:00:27.273 回答
2

也许再加上几个括号,您会更好地理解。

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;
于 2013-11-09T17:01:03.920 回答
0

该代码的格式极差,但将其扩展为:

var pt;
if( 5 in [1,2,3,5]) pt = 2;
else if( 3 in [1,2,3]) pt = 1;
else pt = 7;

它只是一个以可怕变形的方式编写的三元运算符。

于 2013-11-09T17:00:48.047 回答
0

这是一个条件赋值,其工作方式如下:

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]为真

于 2013-11-09T17:00:55.323 回答
0

写它

var pt = (5 in [1,2,3,5]?2:(3 in [1,2,3]?1:7));

使它更清楚。

这通常来自通过服务器端脚本将第一个数字 (5) 放入模板中,但 if .. then 逻辑在 JS 中处理。丑陋,但效果很好。

于 2013-11-09T17:02:13.803 回答