解释解构赋值算法是如何工作的。我决定测试这种行为,但我不知道为什么控制台会给出这些结果。
在提出问题之前,我熟悉了所有来源,除了规范本身,因为它很难理解,而且我不懂英语。
一
var {a,aa,...aaa} = [2, 4, 23];
console.log(a, aa, aaa);
2
var [a,aa,...aaa] = {a:2, aa: 4, aaa: 23};
console.log(a, aa, aaa);
UPD:我使用了 Babel.js,也许它会有所帮助。
解释解构赋值算法是如何工作的。我决定测试这种行为,但我不知道为什么控制台会给出这些结果。
在提出问题之前,我熟悉了所有来源,除了规范本身,因为它很难理解,而且我不懂英语。
一
var {a,aa,...aaa} = [2, 4, 23];
console.log(a, aa, aaa);
2
var [a,aa,...aaa] = {a:2, aa: 4, aaa: 23};
console.log(a, aa, aaa);
UPD:我使用了 Babel.js,也许它会有所帮助。
可以通过以下方式验证此行为:
如果你想把一个数组作为一个对象,那么你可以使用重命名的分解——毕竟,数字不能是变量名,但我提请你注意它
aaa仍然是一个对象,而不是一个数组:只有可迭代
[]对象才能通过以下方式解构:PS:一般情况下,最好是人为地做每一件事:
在这两种情况下,行为都是不可理解的,因为您试图将对象推入数组,反之亦然。
有关语法,请参阅文档:
没有将数组解构为对象的选项,反之亦然。所有例子中左右括号都一样,也就是说,数组被解构为数组,而对象被解构为对象。
这是一个按预期工作的结构,请注意括号:
Point 1.运行 babel 并获取代码:
我们
a放入ref.a是因为_ref是一个数组,ref.a所以没有设置。与aa. 现在我们看一下,我们把除了andaaa之外的所有值都放到了\u200b\u200bin 中,但是由于and没有设置,所以我们在输出时得到了所有三个值。aaaaaa总而言之,
aand中aa没有放入任何内容,因为数组中没有名称为aand的变量aa,aaa我们将剩下的所有内容放入其中。我什至读过一篇关于 MDN 的文章,理解了本质。
对于数组:不管数组是如何获得的(MDN 例子中的变量和函数会让很多人感到困惑),关键是赋值发生的顺序与第一个数组中的变量相同:
如果右侧数组中的值比左侧数组中的值多,则根本不使用多余的值,或者将其放在带有扩展运算符的变量中(...)
对于对象:
几乎相同,只有值通过属性键放置在变量中:
在这两种情况下,左侧数组中的额外变量都将声明为 undefined