这个是弱类型语言特点赋予什么值就是什么类型。举例来说吧
alert(typeof('0')); //返回的类型为string类型
alert(typeof(-'0'));或者alert(typeof(+'0')); //返回的类型为number类型
那么那个数组也是同样道理alert(typeof([])); //返回的类型为object类型
alert(typeof(+[]));或者alert(typeof(-[])); //返回的类型为number类型
因为加减号只对number类型的起到运算的作用所以后面必须是number类型的数据如果不是强制转换(前提是加号没有做字符串链接情况下)那么当他被转换成number类型后那个++就不用多说了
alert(typeof('0')); //返回的类型为string类型
alert(typeof(-'0'));或者alert(typeof(+'0')); //返回的类型为number类型
那么那个数组也是同样道理alert(typeof([])); //返回的类型为object类型
alert(typeof(+[]));或者alert(typeof(-[])); //返回的类型为number类型
因为加减号只对number类型的起到运算的作用所以后面必须是number类型的数据如果不是强制转换(前提是加号没有做字符串链接情况下)那么当他被转换成number类型后那个++就不用多说了
true => !![]
undefined => [][[]]
NaN => +[![]]
0 => +[]
1 => +!+[]
2 => !+[]+!+[]
10 => [+!+[]]+[+[]]
Array => []
Number => +[]
String => []+[]
Boolean => ![]
Function => []["filter"]
eval => []["filter"]["constructor"]( CODE )()
window => []["filter"]["constructor"]("return this")()
看红色部分是+[+[]]其中有两个+[]这个东西他返回的值是数字类型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是字符串类型的