dev.to | 📄 原文链接 | 2026-10-31 收录

空对象加空数组等于零:JavaScript 没坏,是解析器在耍花招

来源:dev.to — 2026-10-29

📋 概述

作者在法兰克福机场候机时重启了停更已久的 JS WTF 系列,拆解 {} + [] 得 0 这件事。关键在于语句开头的 {} 并不被当作对象字面量,而是被解析成一个空代码块,于是整个表达式变成两段:空块什么都不做,+[] 是对空数组施加一元加号。数组需要先被转成原始值,空数组调用 toString() 得到空字符串,Number("") 再得到 0,于是结果就是 0。同样的符号放进括号或函数调用里会被强制当作对象,返回的是 "[object Object]"。作者强调这不是语言坏了,而是自动分号插入与隐式类型转换留下的历史包袱,而几百万存量网站正依赖这些旧语义,所以它大概率永远不会被修掉。

🔑 核心要点

💡 金句

“One important detail: this behavior depends on how the code is parsed.”
译:一个重要细节:这个行为取决于代码是如何被解析的。
← 返回 dev.to 首页