V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
zencitta
V2EX  ›  JavaScript

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

  •  
  •   zencitta · 2020-04-07 00:47:06 +08:00 · 3913 次点击
    这是一个创建于 1474 天前的主题,其中的信息可能已经有所发展或是发生改变。
    var a = ""+([][[]]+[])[(((((+(!!!![])))))+[])]+(+((((+!(+[])))+[])+(![]+[])[(((((!+([])+!+([])+!!!!([])+!!!!([])))))+[])]+(+!!!!([])+[])+((((((((+!(!![]))))))))+[])+(((+!(!![])))+[])+((((((((+(![]))))))))+[]))+[])[((!+[])+(!![])+!!!!([])+!+([])+(!!!![])+!+[]+!+[]+[])]+((((((((!+[])+!(![])+!!([])+(!![])))))))+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+[])+"";
    

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

    20 条回复    2020-04-07 20:12:38 +08:00
    limuyan44
        1
    limuyan44  
       2020-04-07 01:31:34 +08:00
    ([][[]]+[]) [!![]+!![]] 看输出就知道了
    learningman
        2
    learningman  
       2020-04-07 01:57:48 +08:00 via Android
    混淆呗,不要用人脑去分析,浪费时间
    crab
        3
    crab  
       2020-04-07 02:30:59 +08:00   ❤️ 1
    jsfuck decode
    yuzo555
        4
    yuzo555  
       2020-04-07 02:36:12 +08:00
    利用 JS 输出的 undefined 、false 这些字符串作为初始素材,
    以及 bool 可以转换为 0 或 1 输出数字进行定位,
    最终就可以组合出需要的代码或字符串
    zhw2590582
        5
    zhw2590582  
       2020-04-07 07:59:27 +08:00 via iPhone   ❤️ 5
    不要去研究这种没意义的东西
    TomVista
        6
    TomVista  
       2020-04-07 08:28:58 +08:00
    let temp = 13 >> 1 最近见到的
    icedwatermelon
        7
    icedwatermelon  
       2020-04-07 08:58:05 +08:00   ❤️ 1
    guolaopi
        8
    guolaopi  
       2020-04-07 09:31:03 +08:00
    @zhw2590582
    然而相关知识面试会问的吧?
    guolaopi
        9
    guolaopi  
       2020-04-07 09:32:11 +08:00
    @TomVista
    位移运算符还不算太冷门的东西
    azh7138m
        10
    azh7138m  
       2020-04-07 09:42:54 +08:00 via Android
    @guolaopi 哪个睿智面试会问这个东西啊,说出开让大家见识一下 😺
    guolaopi
        11
    guolaopi  
       2020-04-07 09:45:00 +08:00
    @azh7138m
    不是跟这个完全一样的东西,
    可能会问 ()+![] 结果是啥,为什么等这种问题
    gimp
        12
    gimp  
       2020-04-07 09:49:39 +08:00
    @guolaopi 没人会问,问这种问题的睿智公司不应该去。
    Mutoo
        13
    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
        14
    guolaopi  
       2020-04-07 09:52:07 +08:00
    @gimp
    是吗。那我转前端以后面试就放心了(滑稽
    zhw2590582
        15
    zhw2590582  
       2020-04-07 11:11:49 +08:00 via iPhone
    @guolaopi 最多会问类型的隐式转换,但这种题目只要变一下,面试官都不知道怎么回答。
    biguokang
        16
    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
        17
    TomVista  
       2020-04-07 11:58:30 +08:00
    @biguokang
    @guolaopi

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

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

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

    可以写成

    if ( ~str.indexof('xxx') ) { //xxxxx }
    wednesdayco
        20
    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(_)
    你可以来看看这段。更加神奇。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2931 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 13:50 · PVG 21:50 · LAX 06:50 · JFK 09:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.