写哑代码,我发现有些奇怪。
for(const [[[[[fancy, loop]]]]] in [0, 0]) {
console.log(fancy, loop);
}
// Chrome 70.0.3538.77 says:
// 0 undefined
// 1 undefined
就像将0
和1
分配给[[[[[fancy, loop]]]]]
一样,这是数组解构发生并应该引发错误,不是吗?或不。这只是我的想法,现在让我感到困惑。
能否请您告诉我它如何有效且无错误?我想念什么?
答案 0 :(得分:25)
没有将0
和1
分配给[[[[[fancy, loop]]]]]
。您正在遍历[0, 0]
的键,因为您使用的是in
而不是of
,而这些键是 strings 。
字符串"0"
是可迭代的,唯一的元素是"0"
。反复将"0"
分配给[[[[[fancy, loop]]]]]
,将"0"
拆包并得到"0"
,直到最终下降到
[fancy, loop] = "0"
这时,最终的拆包将"0"
分配给fancy
,将undefined
分配给loop
。
答案 1 :(得分:4)
您使用的是in
而不是of
,所以您获取的是数组的属性而不是值。在这种情况下,您将获得数组索引作为字符串(0
,1
)。基本上,您每次都在破坏长度为1的字符串。因此,您始终会获得每个迭代属性的第一个字符