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

为何使用ES2022的array.at()结合解构赋值交换数组元素报错?

为什么用array.at()结合解构赋值交换数组元素会报错?

核心原因很简单:解构赋值的左侧必须是能被赋值的目标(左值/lvalue),而array.at()是方法调用,它只返回元素的值,没法被赋值。

具体拆解:

  • 用array[0]这种下标访问时,它指向的是数组里的一个具体位置,JavaScript允许直接给这个位置赋值,属于合法的赋值目标。
  • 但array.at(0)是调用方法得到的结果——它只是一个元素的值(右值/rvalue),只能用来读取,不能被赋值。你试图给方法的返回值赋值,就跟写(2 + 3) = 10一样,完全不符合语法规则,自然会抛出SyntaxError: Invalid destructuring assignment target。

直观验证:

单独跑下面两行代码,就能看出区别:

// 合法:直接给数组指定位置赋值
array[0] = 'new val';

// 非法:试图给方法返回值赋值,直接报错
array.at(0) = 'new val'; // Uncaught SyntaxError: Invalid left-hand side in assignment

所以解构赋值的每一个左侧项都得是能接受赋值的引用,array.at()做不到这点,而传统下标访问可以。

内容的提问来源于stack exchange,提问作者Caesar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 03:45:08