javascript - JavaScript 中不明确的数组赋值

标签 javascript

看完这个question ,我才知道

let a = [1, 2] [3, 4] = [5, 6];

console.log(a);

是有效的 JavaScript 代码,但是我无法理解它是如何工作的。 谁能解释一下上面代码的工作流程。

最佳答案

执行了很多变体之后

让 a = [1, 2] [3, 4] = [5, 6];

我才知道

[1, 2] [3, 4] 相当于 [1, 2][4],其中 [1, 2] 代表一个数组,而[4]代表[1, 2]数组的第5个索引,但找不到任何官方文档。

更新 我对评论中提到的文档是错误的,[3, 4] 中的 [] 是属性访问器,而 3, 4 是两个不同的代码语句由 Comma operator 分隔。在逗号运算符中,每条由 , 分隔的语句从左到右执行,并返回最后一条语句的结果。

上面的代码现在简化为

让 a = [1, 2][4] = [5, 6];

比较容易理解。如果我们再简化一点,它就变成了

let arr = [1, 2];
let a = arr[4] = [5, 6];

console.log(a);
console.log(arr);

现在很容易解释它 arr[4] = [5, 6][5, 6] 分配给 arr< 的第 5 个索引a = arr[4]arr 的第 5 个索引分配给 a,现在是 [5, 6] 因此 [5, 6] 被分配给 a

现在 a 的当前值为 [5, 6]arr 的当前值为 [ 1, 2, undefined , 未定义, [ 5, 6 ] ]

让我们再次重写上面的代码

let arr = [1, 2];
let a = arr[3, 4] = [5, 6];

console.log(a);
console.log(arr);

关于javascript - JavaScript 中不明确的数组赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49293973/

相关文章:

javascript - AJAX 请求错误,尽管数据已成功更新。 "Unexpected Token <"

javascript - Angular - 同时执行多个功能

javascript - Angularjs CRUD 删除问题(在 DELETE 方法中调用 GET)

javascript - 通过 jquery 创建的按钮不响应点击

javascript - 将 Carrage 返回转换为 br 标签

javascript - 需要使用JS获取<a>标签的 "id"属性

javascript - vue.js - 未在实例上定义但在渲染期间被引用

javascript - 使用 jest.mock 传递超出范围的变量

javascript - 计算具有多个 ID 的多个 Yii2 掩码输入

javascript - 使用字符串键绑定(bind)嵌套对象