我对JavaScript特性有疑问——;解构分配

我对JavaScript特性有疑问——;解构分配,javascript,Javascript,JS代码示例: [1,2,...undefined] throw error: Uncaught TypeError: undefined is not iterable. but, use object destructuring {a: 1, b: 2, ...undefined} = {a: 1, b: 2} 为什么?在第一行中,您正在使用..语法解包一个变量,该变量被调用,并且期望在数组的该位置有一个值 在第二行中,您没有展开,您正在使用,但您不希望从未定义的展开返回值,因此它被忽略并

JS代码示例:

[1,2,...undefined]
throw error: Uncaught TypeError: undefined is not iterable.
but, use object destructuring
{a: 1, b: 2, ...undefined} = {a: 1, b: 2}

为什么?

在第一行中,您正在使用
..
语法解包一个变量,该变量被调用,并且期望在数组的该位置有一个值


在第二行中,您没有展开,您正在使用,但您不希望从
未定义的
展开返回值,因此它被忽略并视为空。

第一行不是在分解-它在展开,您无法展开
未定义的
。但是,您可以分配给它,这就是为什么第二个可以工作的原因。您只能迭代实现iterable(类似于Java)的数据类型。
在不同的上下文中意味着不同的事情。第二种情况不是使用“扩散”。他们正在使用我称之为“rest属性”的东西。所有重命名属性(其中没有)都收集在一个新对象中,并分配给
未定义的
(只读)。