You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JavaScript解构语法交换数组元素时出现undefined错误的原因咨询

JavaScript解构语法交换数组元素时出现undefined错误的原因咨询

嗨,我来帮你搞清楚这个错误的根源~

你遇到的这个TypeError其实是**自动分号插入(ASI)**搞的鬼!咱们来看你的代码写法:

var arr = [1, 2, 3]

[arr[2], arr[1], arr[0]] = arr

因为第一行代码结尾没有写分号,JavaScript引擎会尝试把这两行代码合并成一句来解析,最终它会理解成这样:

var arr = [1, 2, 3][arr[2], arr[1], arr[0]] = arr

这就麻烦了——在执行这段代码的时候,arr变量还没完成初始化(还在赋值过程中),当引擎试图访问arr[2]的时候,arr此时是undefined,自然就会抛出“Cannot read properties of undefined (reading '2')”的错误。

如果给第一行加上分号,代码就能正常运行并得到你预期的结果:

var arr = [1, 2, 3];

[arr[2], arr[1], arr[0]] = arr;

console.log(arr); // 输出 [3, 2, 1]

顺便提一句,加了分号后这段代码能正常工作,是因为解构赋值时右边的数组会先被完整读取并保存为临时值,之后才会依次给左边的数组位置赋值,不会因为中间修改数组而干扰最终结果。不过核心问题还是你最初的代码缺少分号,导致JavaScript的自动分号插入机制帮了你“倒忙”。

备注:内容来源于stack exchange,提问作者Kathiravan S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 09:28:14