首页 > js黑魔法:+[] 等于0?

js黑魔法:+[] 等于0?

这个问题,一张图就够了!

为什么+[]等于0?我还试过别的:

除了百思不得其解,我想不出其他词了……

+是什么意思?


你还没见过更黑魔法的呢

  1. []+{} = "[object Object]"

  2. {}+[] = 0

javascript的这类黑魔法其原因就是它的隐式变换规则造成的。
碰到这种问题,直接去翻规范。


既然我看见了,我也发一个,你们不要打我啊,我只是觉得和这个题目很贴切!!!

 (!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]

运行上面的js试试,我好邪恶!!!


+"" 等于你的 +[] 等于 0

"" 等于你的 []

+代表数字中的正号

如果+的右边是字符串那么他会将字符串强制转换为数字,由于JS中空也相当于0,自然就转换成了0


大犀牛上面有解释,+前缀是转换为数字,!!前缀是转换为布尔型


+[]

  1. [].valueOf() // 返回数组自身,不是原始数据

  2. 调用 [].toString() // 返回空字符串

  3. Number("") // 空字符串转型为数字,返回0


http://es5.github.io/#x11.4.6


你需要了解数据类型转换规则
+默认隐式转换都转为数字类型 Number() ,空字符串、null、空数组都是转换为0的

【热门文章】
【热门文章】