思考 JavaScript

主要观点:作者在教授 JavaScript 工作坊时被学员提问一个 JS 脑筋急转弯,自己起初分析错误,通过运行代码解析器和查阅规范才弄明白,借此分享该问题及思考过程,强调思考像 JavaScript 一样能帮助写更好代码,同时指出对编程语言的学习是永无止境的。
关键信息:

  • 问题:[[][]];可编译运行,[];报错,原因在于[]虽从语法看可作为左值表达式,但作为[]++时是运行时错误ReferenceError,而[[]][0]可作为左值表达式是因为其结果是对值的引用。
  • 思考过程:作者起初认为[]++类似x = x + 1[]不能作为左值,对[[]][0]的理解也有误,后通过查阅规范明白相关原理。
  • 相关规范:如++是“更新表达式”中的“后缀递增运算符”,要求操作数是有效的左值表达式,[]是有效的“Primary Expression”可作为左值表达式等。
    重要细节:
  • 作者提及自己在思考过程中的错误,如对x++的错误理解,对[[]][0]的错误解读等。
  • 解释了2 = 3虽语法有效但运行时错误的原因与[]++相同,都是因为不满足“PutValue”算法中对引用的要求。
  • 提到运行[[]][0]++在浏览器控制台报告0而不是1[1]是因为++返回原始值(经强制类型转换后)。
  • 介绍了作者 Kyle Simpson 是 web 软件工程师,以“你不知道 JS”系列书籍和在线课程闻名,倡导用最少必要工具解决问题,将人类和技术结合。
阅读 15
0 条评论