Javascript复杂的“typeof”表达式

时间:2013-07-11 17:25:29

标签: javascript typeof

我需要了解下面的java脚本代码,由其他人编写。 能告诉我下面的内容是什么意思(尤其是第四行)。 它是一条冗长的线(直到;)。 这不是一个难题。 它是一个购物应用程序的代码,实际上在使用(未更改)。

function trackMetrics(a,b,c,d)
{
    var e=a,f=b,g=c,h=d;
    typeof a=="object"&&(a.type!=null&&(e=a.type),a.action!=null&&(e=a.action),a.data!=null&&f=a.data),a.map!=null&&(g=a.map),a.load!=null&&(g=a.load)),typeof f=="object"&&(f.data!=null&&(f=f.data),f.map!=null&&(g=f.map),f.load!=null&&(h=f.load)),typeof g=="object"&&(g.map!=null&&(g=g.map),g.load!=null&&(h=g.load));

2 个答案:

答案 0 :(得分:2)

嗯,目前,这意味着SyntaxError,因为它之前有一个不匹配的)

typeof f=="object"

但是,似乎是使用comma operator对多个语句进行分组(与;进行分组)并使用&&的{​​{3}}作为{的替代{ {1}}陈述。

if

答案 1 :(得分:0)

将它分解成碎片,逐个理解,然后你可以将整体的意义放在一起。

请注意&&当运算符达到假值(称为短路)时,它将停止处理以下条件。无论结果如何,逗号运算符都将使它们分离的每个表达式都被执行。这些代码一起使用它们在一行中进行大量逻辑测试和分配。 (这绝对可以说,“哎呀!”这里。)

typeof a=="object"      // If a is of type "object"
&& (                    // then
    a.type!=null        //   if a.type != null
        &&(e=a.type)    //     then e = a.type
    ,a.action!=null     //   if a.action != null
        &&(e=a.action)  //     then e = a.action
    ,a.data!=null       // ... and so on ...
        &&f=a.data)
    ,a.map!=null
        &&(g=a.map)
    ,a.load!=null
        &&(g=a.load)
   )
,typeof f=="object"
    &&(
        f.data!=null
            &&(f=f.data)
       ,f.map!=null
            &&(g=f.map)
       ,f.load!=null
            &&(h=f.load)
      )
,typeof g=="object"
    &&(
        g.map!=null
            &&(g=g.map)
        ,g.load!=null
            &&(h=g.load)
      )
;

在查看之后,很容易认为它什么都不做,但是在某些条件中嵌入了赋值(例如g=a.map)。因此,您需要处理逻辑(并希望理解其含义)以查看哪些条件将导致设置哪些值。