Javascript逗号语法和复杂表达式,缩小,混淆:请帮助我理解一段代码

时间:2015-05-20 17:49:20

标签: javascript obfuscation minify

我需要了解一些代码。我对Java,C ++,PHP的语法感觉很好,但是Javascript语法仍然是一个"黑暗的森林"为了我。以下是原始形式和可能的解释,我的意思是程序逻辑方面的等价物:

1

var o,
a,
s = "https://widget.kiwitaxi.com",
c = e.createElement("iframe"),
l = e.getElementById(r.target),
p = r && r.height_bias ? 4 + r.height_bias : 4,
u = !1,
f = parseInt(r.min_height, 10) ? parseInt(r.min_height, 10) : r.hide_form_extras && !r.default_form_title ? 304 : 386;

我几乎可以肯定这个,在这里我可以用分号替换逗号并将VAR语句添加到每行的开头,它会产生相同的结果,我是对的吗?

var o;
var a;
var s = "https://widget.kiwitaxi.com";
var c = e.createElement("iframe");
var l = e.getElementById(r.target);
var p = r && r.height_bias ? 4 + r.height_bias : 4;
var u = !1;
var f = parseInt(r.min_height, 10) ? parseInt(r.min_height, 10) : r.hide_form_extras && !r.default_form_title ? 304 : 386;
  1. 这个对我来说真的很难,我不能假设任何解释
  2. 据我所知:

    1. " O"评估为s +" / w"然后与" - "连接,然后与" .html"连接。 ?我的意思是,是否有任何条件适用于该字符串构建,是否可以通过此代码中的条件应用这两个连接中的任何一个?
    2. 比较==运算符在语句中做了什么(部分" en" == r.language ...),哪个变量接收到该结果?或者它只是一个混淆技巧?
    3. 最后一个,在最后一个逗号之后,r.banner_id || (r.banner_id =" 22995c4e");这是一项任务,很清楚,但这一部分的其他内容有什么意义呢?这里的条件是由条件进行的(如果r.banner不是undefined-or-null-or-false)?

      o = s +" / w", "恩" == r.language&& (o + =" - " + r.language.toString()。toLowerCase()), (" biletik" == r.theme ||" ostrovok" == r.theme)&& (o + =" - " + r.theme.toString()。toLowerCase()), o + =" .html", r.banner_id || (r.banner_id =" 22995c4e");

1 个答案:

答案 0 :(得分:1)

"en" == r.language && (o += "-" + r.language.toString().toLowerCase()),

噢......这条线很棘手。

所以,例如:如果你要编写var myVar = false && thisFunctionThrowsError(),如果函数被调用则会抛出异常,实际上会返回错误 - 因为&符号之后的任何内容不会被评估。这被称为短路评估。在这种情况下,有人切断了他检查&&比较结果的部分,并仅使用它来确定是否运行右侧。

所以,如果我写:

"biletik" == r.theme && (o += "-");

这意味着只有在o时才会向r.theme == 'biletik'添加短划线。

最后一行恰恰相反;它看起来像是一个懒惰的初始化器。如果r.banner_id为null,则计算结果为false - 因此它会运行||的第二部分,并将其初始化为22995c4e