【这标题就是吸引眼球滴~~~~~】
今天在百度上面看到一个东东
var decode = [+!+[]+[+[]]]+[!+[]+!+[]+!+[]]+[!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]+[+[]];结果是10306
做为一个初入门的骚年.....我惊呆了...查了一会资料,明白了
先把这个拆开一下var decode = [+!+[]+[+[]]] + [!+[]+!+[]+!+[]] + [!+[]+!+[]+!+[]+!+[]+!+[]+!+[]] + [+[]];
我只分析第一个[+!+[]+[+[]]]这个也是分成两个部份[+!+[] + [+[]]]先看左边 +!+[]+[] = 0(在一个对象前面加上任意符号,都会强制转换类型,因为是+,所以会转成number,可以用typeof输出来看看)!+[] = true(因为0=false,所以!+[] = !0 = true)+!+[] = 1(+true,又会把true转为number,true=1,这是最基础的js)so,左边就是1。再看右边[+[]]上面已经得出结论 +[] = 0,所以 [+[]] = [0],此时的右边是一个数组对象Object那么左边+右边1+[0],是number+object,此时的+不是运算符,而是连字符,所以结果就是10,typeof = string。后面的大致说下[!+[]+!+[]+!+[]] 就是三个!+[]相加,就是 1+1+1 = [3][!+[]+!+[]+!+[]+!+[]+!+[]+!+[]] 就是六个!+[]相加 = [6][+[]] = [0]所以前后加起来就是[10]+[3]+[6]+[0],typeof=string