我也不明白我怎么喜欢研究这些奇奇怪怪的内容😂
(!+[]+[]).length ==> 4
还是js的隐氏转换规则,详见上节;
https://www.cnblogs.com/hq-HQ/p/12624944.html
补充:! 逻辑非,将操作数的布尔值求反,!! 类型转换,将对应的类型转换为Boolean型;
举个🌰:
!null ==>true(等同于Boolean(null)==>false,加上非!,结果取反), !undefined ==>true, !1 ==>false, ![] ==>false
!!null ==>false (等同于Boolean(null)==>false), !!unsefined ==> false, !!1==>true, !![]==>true
言归正传:一步一步来,
先看!+[], !是个String类型,按照规则,[]也要转为String类型 "", 所以就是 !+"" , 即 ==> !"",(逻辑非来了)因为Boolean('')==>false,结果取反则为 true,
接下来变成了 true+[] ,二者都转换为字符串类型拼接,结果还是true;
最终变成 true.length 所以浏览器会输出 4
插一句:Boolean类型和数组类型相加,两者会转变为字符串类型拼接,当数组中有多项时,字符串会用逗号','隔开,在拿一个栗子🌰
加法有了,减法还会远么~~
Boolean类型和数组类型相减,两者会转变为Number类型运算,且必须只能有一项,如果多于一项,结果显示NaN;栗子🌰再来:
来源:https://www.cnblogs.com/hq-HQ/p/12625585.html