请解释这个奇怪的Javascript行

Dan*_*ith 3 javascript syntax obfuscation deobfuscation

我遇到了一段代码:

for(i=((90.0E1,0x5A)<=(0x158,140.70E1)?(.28,3.45E2,0):(95.30E1,26.40E1)<=1.400E2?(1,this):(108.,0x227));i<length;i++) { 
   // some other code here
} 
Run Code Online (Sandbox Code Playgroud)

有人可以通过解释for()括号中的内容来帮助我吗?

Amn*_*non 5

逗号运算符的结果始终是右侧的值.因此每对形式(a,b)评估为b.因为在你的代码中"a"从来没有副作用,我们可以简单地省略它来得到:

for(i=(0x5A <= 140.70E1 ? 0 : ...);i<length;i++) { 
Run Code Online (Sandbox Code Playgroud)

其中"......"代表无关紧要的东西:由于0x5A <= 140.70E1的计算true结果为,所以?:运算符的结果是问号右边的值,即0.

所以结果相当于

 for (i=0; i<length; i++) { 
Run Code Online (Sandbox Code Playgroud)

这是有道理的.