对不起基本问题。我在javascript中找到了以下构造,我不熟悉它。你知道这个建筑是什么吗?
我已经改变了变量,但含义是一样的。
var pt = (
5 in [1,2,3,5]?
2:
3 in [1,2,3]?
1:
7);
它看起来像检查所有条件并根据条件采取行动,但最后一步是没有条件,这样的事情?
答案 0 :(得分:6)
这使用ternary conditional operator和in operator。它可以这样写:
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 作为关键(参见in)。所以它是false
(但3 in [1,2,3,5]
将是true
)。
整体相当于
var pt = 7;
答案 1 :(得分: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;
答案 2 :(得分:0)
该代码格式极差,但扩展后转换为:
var pt;
if( 5 in [1,2,3,5]) pt = 2;
else if( 3 in [1,2,3]) pt = 1;
else pt = 7;
这只是一个以可怕的方式编写的三元运算符。
答案 3 :(得分: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 operator检查给定键是否在对象中,而不是该值是否存在,因此5 in [1,2,3,5]
为false,但0 in [1,2,3,5]
为真
答案 4 :(得分:0)
写它
var pt = (5 in [1,2,3,5]?2:(3 in [1,2,3]?1:7));
更清楚。
这通常来自通过服务器端脚本放入模板的第一个数字(5),但是在JS中处理if .. then逻辑。丑陋,但运作良好。