为何使用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
相关产品推荐
相关产品推荐

