结构赋值依赖可迭代对象的[symbol.iterator]方法自动调用迭代器提取值;数组、字符串、map、set等内置类型默认可迭代,自定义对象需手动实现该方法才能解构。

JavaScript 中迭代器本身不直接参与结构赋值,但可迭代对象(即实现了 [Symbol.iterator] 方法的对象)可以和结构赋值配合使用——因为结构赋值会自动调用该对象的默认迭代器来提取值。
结构赋值依赖迭代器协议
当对一个对象进行数组解构(如 const [a, b] = iterable;)时,JavaScript 引擎会检查右侧值是否为可迭代对象:它必须拥有 [Symbol.iterator] 方法,且该方法返回一个符合迭代器协议的对象(含 next() 方法)。只有满足这个条件,解构才能按顺序取前几个 value。
常见可迭代对象的解构示例
以下写法都成立,背后都是迭代器在工作:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
数组解构:
const [x, y] = [10, 20];→ 数组自带[Symbol.iterator],每次next()返回下一个元素 -
字符串解构:
const [a, b] = "hi";→ 字符串按字符迭代,结果是a === "h",b === "i" -
Map 解构键值对:
const map = new Map([["a", 1], ["b", 2]]); const [[k1, v1], [k2, v2]] = map;→map[Symbol.iterator]()等价于map.entries(),返回键值对数组 -
Set 解构:
const set = new Set([3, 5]); const [first, second] = set;→ 按插入顺序依次取出值
自定义对象支持解构的关键
要让自己的对象能用于结构赋值,只需在对象上部署 [Symbol.iterator] 方法:
const counter = {
from: 1,
to: 3,
[Symbol.iterator]() {
let current = this.from;
return {
next() {
if (current
<h3>注意边界情况</h3>
<p>解构过程中不会报错,但行为取决于迭代器返回值:</p>
- 如果迭代器提前返回
{done: true},对应位置得到undefined(如const [x, y] = [1];→y === undefined) - 迭代器返回
value: undefined且done: false,解构也会接收这个undefined - 普通对象(非可迭代)不能直接数组解构:
const obj = {a:1}; const [x] = obj;会报TypeError: obj is not iterable
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










