Javascript不熟悉的任务构建

时间:2013-11-09 16:57:01

标签: javascript node.js

对不起基本问题。我在javascript中找到了以下构造,我不熟悉它。你知道这个建筑是什么吗?

我已经改变了变量,但含义是一样的。

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

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

5 个答案:

答案 0 :(得分:6)

这使用ternary conditional operatorin 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逻辑。丑陋,但运作良好。