1

我需要了解以下由其他人编写的 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));
4

2 回答 2

2

好吧,目前,它的意思是 a SyntaxError,因为它之前有一个无与伦比的)

typeof f=="object"

但是,它似乎使用逗号运算符对多个语句进行分组(vs. ;),并使用&&' 的短路作为if语句的替代方案。

if (typeof a == "object") {
    if (a.type != null)
        e = a.type;
    if (a.action != null)
        e = a.action;
    if (a.data != null)
        f = a.data;
}

if (a.map != null)
    g = a.map;

// etc.
于 2013-07-11T17:38:25.837 回答
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)中嵌入了赋值。因此,您需要处理逻辑(并希望理解其含义)以查看哪些条件会导致设置哪些值。

于 2013-07-11T17:40:54.607 回答