看到一个 javascript 赋值语句不明觉厉,请高手分析一下

2020-04-07 00:47:06 +08:00
 zencitta
var a = ""+([][[]]+[])[(((((+(!!!![])))))+[])]+(+((((+!(+[])))+[])+(![]+[])[(((((!+([])+!+([])+!!!!([])+!!!!([])))))+[])]+(+!!!!([])+[])+((((((((+!(!![]))))))))+[])+(((+!(!![])))+[])+((((((((+(![]))))))))+[]))+[])[((!+[])+(!![])+!!!!([])+!+([])+(!!!![])+!+[]+!+[]+[])]+((((((((!+[])+!(![])+!!([])+(!![])))))))+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+[])+"";

用控制台试了一下结果是 ny47,请问怎么得出来的。

3929 次点击
所在节点    JavaScript
20 条回复
limuyan44
2020-04-07 01:31:34 +08:00
([][[]]+[]) [!![]+!![]] 看输出就知道了
learningman
2020-04-07 01:57:48 +08:00
混淆呗,不要用人脑去分析,浪费时间
crab
2020-04-07 02:30:59 +08:00
jsfuck decode
yuzo555
2020-04-07 02:36:12 +08:00
利用 JS 输出的 undefined 、false 这些字符串作为初始素材,
以及 bool 可以转换为 0 或 1 输出数字进行定位,
最终就可以组合出需要的代码或字符串
zhw2590582
2020-04-07 07:59:27 +08:00
不要去研究这种没意义的东西
TomVista
2020-04-07 08:28:58 +08:00
let temp = 13 >> 1 最近见到的
icedwatermelon
2020-04-07 08:58:05 +08:00
guolaopi
2020-04-07 09:31:03 +08:00
@zhw2590582
然而相关知识面试会问的吧?
guolaopi
2020-04-07 09:32:11 +08:00
@TomVista
位移运算符还不算太冷门的东西
azh7138m
2020-04-07 09:42:54 +08:00
@guolaopi 哪个睿智面试会问这个东西啊,说出开让大家见识一下 😺
guolaopi
2020-04-07 09:45:00 +08:00
@azh7138m
不是跟这个完全一样的东西,
可能会问 ()+![] 结果是啥,为什么等这种问题
gimp
2020-04-07 09:49:39 +08:00
@guolaopi 没人会问,问这种问题的睿智公司不应该去。
Mutoo
2020-04-07 09:50:12 +08:00
jsfuck 的源码有详细的 mapping
https://github.com/aemkei/jsfuck/blob/master/jsfuck.js

我之前分析过一个类似的代码,供参考
https://blog.mutoo.im/2014/02/make-the-heart-shape-code/
guolaopi
2020-04-07 09:52:07 +08:00
@gimp
是吗。那我转前端以后面试就放心了(滑稽
zhw2590582
2020-04-07 11:11:49 +08:00
@guolaopi 最多会问类型的隐式转换,但这种题目只要变一下,面试官都不知道怎么回答。
biguokang
2020-04-07 11:45:34 +08:00
@TomVista 位运算符不算冷门,相反在某些地方还有用,例如

const KB = 1 << (10 * 1)
const MB = 1 << (10 * 2)
const GB = 1 << (10 * 3)
const TB = 1 << (10 * 4)
const PB = 1 << (10 * 5)

在 go 语言里面结合 iota 特性更酸爽
const (
_ = iota
KB = 1 << (10 * iota)
MB
GB
TB
PB
)
TomVista
2020-04-07 11:58:30 +08:00
@biguokang
@guolaopi

我第一次遇见的时候,真的很懵逼,这特么是啥?这特么是啥?这特么是啥?
marcong95
2020-04-07 12:09:05 +08:00
@gimp #12 这种东西归根到底还是隐式转换、falsy value 、运算符优先级一系列的东西,不至于一上来就睿智不睿智的,玩动态类型语言这种东西从来应该有基本认识。写自然是不应该写的,但是读并不是什么难事
biguokang
2020-04-07 13:53:50 +08:00
@TomVista

更骚的还有按位取反运算符

if ( str.indexof('xxx')!==-1 ) { //xxxxx }

可以写成

if ( ~str.indexof('xxx') ) { //xxxxx }
wednesdayco
2020-04-07 20:12:38 +08:00
for(_='c[c.D,DZ),YYDX](W+2*Vp<1U.06TMath.sin( p *p +3* *C .183 ][p>> ,1 )/ %1 00 ;C--;) 0, , , C ,.6 C 7==3 ,U44&p )* ]= Zfy for( /2 DfcW Y (M-C p / ( +1.82 *t)<0& C )>.7 ) .57+.79) C in c)c[C[0]+[C[6]] C;t=M=y=o=I=2,setInterval(h=>{ t=t%3 +T,a.width=a.height=$=9 "#111"ZgC "lighter"ZsS "#333", $,$XtaW$ ,6 XsC "#0ff",C=82,R=t/9-23,p=R<3?R:3,M+=o=!M|M>78?-o:o,y+=I=!y|y>2 ?-I:I,R>0&&(DsB 5,R>5&&DsRW-C 2*-C C 2.8 ,(y-2 p,2 4 *y/C/3-9 C 18 8 )XsB i=1;i++<24;c.clip()){if(p=t+i| R=$/(i-t Ys=R/4 k=U28?0: /12 *5 $*9/R,l=U75?0:k `hsl(${p 28<64?2 :3 },75%,${50+50* /8)}%)`ZgA T-(i<4 t *T,c.fill(XgA 1 "#9bf" %32<1) C=16 R/8 -R,-$ -3*R,s ,$); Dld R/8 >16&&(p 6||c.stroke()XbaWYC=24 r=R*[.6 ,p%4|p<48?1 :1 +p/6 / (.262 +1.7 >>1&p 3+1 +p 4- 6+.7-!(C %9 6 + /4+t/3 4 5]ZlWA=k+ d_a= -2.1 r-s ,B=l- d_a+7.84 r*(p>192?3:1)-s Y[ , +( Vt (2V t))|0YC<4 )|C>19 YC==((p/8&1?6:9 t%20|0) +p+t)< C>9&C<14,(C +pVt 5&1 , 0 4]&& A,B,s,s)}} 7)';G=/[ - T-ZD]/.exec(_);)with(_.split(G))_=join(shift());eval(_)
你可以来看看这段。更加神奇。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/659953

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX