扫码关注官方订阅号
这个问题,一张图就够了!
为什么+[]等于0?我还试过别的:
除了百思不得其解,我想不出其他词了……
+是什么意思?
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
+[] [].valueOf() // 返回数组自身,不是原始数据 调用 [].toString() // 返回空字符串 Number("") // 空字符串转型为数字,返回0
+[]
[].valueOf() // 返回数组自身,不是原始数据
调用 [].toString() // 返回空字符串
Number("") // 空字符串转型为数字,返回0
你还没见过更黑魔法的呢
[]+{} = "[object Object]"
{}+[] = 0
javascript的这类黑魔法其原因就是它的隐式变换规则造成的。碰到这种问题,直接去翻规范。
大犀牛上面有解释,+前缀是转换为数字,!!前缀是转换为布尔型
你需要了解数据类型转换规则+默认隐式转换都转为数字类型 Number() ,空字符串、null、空数组都是转换为0的
既然我看见了,我也发一个,你们不要打我啊,我只是觉得和这个题目很贴切!!!
(!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]
运行上面的js试试,我好邪恶!!!
+"" 等于你的 +[] 等于 0
"" 等于你的 []
+代表数字中的正号
如果+的右边是字符串那么他会将字符串强制转换为数字,由于JS中空也相当于0,自然就转换成了0
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
你还没见过更黑魔法的呢
[]+{} = "[object Object]"
{}+[] = 0
javascript的这类黑魔法其原因就是它的隐式变换规则造成的。
碰到这种问题,直接去翻规范。
大犀牛上面有解释,+前缀是转换为数字,!!前缀是转换为布尔型
你需要了解数据类型转换规则
+默认隐式转换都转为数字类型 Number() ,空字符串、null、空数组都是转换为0的
既然我看见了,我也发一个,你们不要打我啊,我只是觉得和这个题目很贴切!!!
+"" 等于你的 +[] 等于 0
"" 等于你的 []
+代表数字中的正号
如果+的右边是字符串那么他会将字符串强制转换为数字,由于JS中空也相当于0,自然就转换成了0