主要观点:作者在教授 JavaScript 工作坊时被学员提问一个 JS 脑筋急转弯,自己起初分析错误,通过运行代码解析器和查阅规范才弄明白,借此分享该问题及思考过程,强调思考像 JavaScript 一样能帮助写更好代码,同时指出对编程语言的学习是永无止境的。
关键信息:
- 问题:
[[][]];可编译运行,[];报错,原因在于[]虽从语法看可作为左值表达式,但作为[]++时是运行时错误ReferenceError,而[[]][0]可作为左值表达式是因为其结果是对值的引用。 - 思考过程:作者起初认为
[]++类似x = x + 1,[]不能作为左值,对[[]][0]的理解也有误,后通过查阅规范明白相关原理。 - 相关规范:如
++是“更新表达式”中的“后缀递增运算符”,要求操作数是有效的左值表达式,[]是有效的“Primary Expression”可作为左值表达式等。
重要细节: - 作者提及自己在思考过程中的错误,如对
x++的错误理解,对[[]][0]的错误解读等。 - 解释了
2 = 3虽语法有效但运行时错误的原因与[]++相同,都是因为不满足“PutValue”算法中对引用的要求。 - 提到运行
[[]][0]++在浏览器控制台报告0而不是1或[1]是因为++返回原始值(经强制类型转换后)。 - 介绍了作者 Kyle Simpson 是 web 软件工程师,以“你不知道 JS”系列书籍和在线课程闻名,倡导用最少必要工具解决问题,将人类和技术结合。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。