这个是弱类型语言特点赋予什么值就是什么类型。举例来说吧
alert(typeof('0')); //返回的类型为string类型
alert(typeof(-'0'));或者alert(typeof(+'0'));  //返回的类型为number类型
那么那个数组也是同样道理alert(typeof([]));  //返回的类型为object类型
alert(typeof(+[]));或者alert(typeof(-[]));   //返回的类型为number类型
因为加减号只对number类型的起到运算的作用所以后面必须是number类型的数据如果不是强制转换(前提是加号没有做字符串链接情况下)那么当他被转换成number类型后那个++就不用多说了

解决方案 »

  1.   

    简单的说+的时候会2边的内容如果不全是数字的话,会尝试toString()了之后,再执行字符串连接。
      

  2.   

    這有一個網站專門研究:  JSFUCKBasicsfalse       =>  ![]
    true        =>  !![]
    undefined   =>  [][[]]
    NaN         =>  +[![]]
    0           =>  +[]
    1           =>  +!+[]
    2           =>  !+[]+!+[]
    10          =>  [+!+[]]+[+[]]
    Array       =>  []
    Number      =>  +[]
    String      =>  []+[]
    Boolean     =>  ![]
    Function    =>  []["filter"]
    eval        =>  []["filter"]["constructor"]( CODE )()
    window      =>  []["filter"]["constructor"]("return this")()
      

  3.   

    alert(++[[]][+[]]+[+[]]);
    看红色部分是+[+[]]其中有两个+[]这个东西他返回的值是数字类型0
    如果是+[1]是数字类型1,如果是+[2]是数字类型2其他的依次类推。至于为什么+[]是0是js语法规定的。
    那么了绿色部分就也是0了整理下来就是这样的alert(++[[]][0]+0);
    那么好下面更牛逼的来了++[[]]这个东西就等于[[]]=[[]]+1在这个当中那个[[]]的值是一个空值他和1相加就是字符串‘1’
    整理下来就是alert('1'[0]+0);这里又有一个牛叉的问题了'789'[1]这里取出的值是8就是像数组取值那样和php相似
    那么'1'[0]的值就是字符串的'1'最后整理下来是alert('1'+0);最后结果就是alert(10)那个10是字符串类型的