JavaScript内置可迭代对象是默认实现[Symbol.iterator]方法、可直接用于for...of等场景的对象,包括Array、String、Map、Set、TypedArray、arguments、NodeList和Generator函数返回值;普通Object、Date、Math等则不是。

JavaScript 中的内置可迭代对象,是指那些**默认就实现了 [Symbol.iterator] 方法**、能直接用于 for...of、展开运算符([...iterable])、Array.from()、解构等场景的对象。
最常用的内置可迭代对象
这些是日常开发中高频使用、无需额外处理就能遍历的类型:
-
Array(数组):如
[1, 2, 3],按索引顺序逐项迭代 -
String(字符串):如
"hello",按 Unicode 字符(非字节)逐个迭代 -
Map:迭代时返回
[key, value]数组,保持插入顺序 - Set:按元素添加顺序迭代唯一值
-
TypedArray(如
Uint8Array、Int32Array):类数组数值集合,原生可迭代
容易被忽略但同样内置可迭代的对象
它们不是“数据容器”型结构,但在规范中明确实现了可迭代协议:
-
arguments:函数内可用的类数组对象,支持
for...of(注意:箭头函数无arguments) -
NodeList:如
document.querySelectorAll('div')返回的结果,可直接遍历 - Generator 函数的返回值:生成器对象既是可迭代对象,本身也是迭代器
常见误解:哪些不是内置可迭代对象?
以下对象**默认不满足可迭代协议**,直接用于 for...of 会报错 TypeError: xxx is not iterable:
立即学习“Java免费学习笔记(深入)”;
-
普通 Object({}):键无序,未实现
[Symbol.iterator];需手动添加或转为Object.keys()/entries()等 - Date:表示时间戳,不可遍历
- Math、JSON、RegExp:工具型静态对象,不含可遍历数据结构
- Promise、Function、null、undefined:均不实现该协议
快速验证方法
判断一个值是否为可迭代对象,最可靠的方式是检查它是否有可用的 [Symbol.iterator] 方法:
例如:
isIterable([1,2]) → true
isIterable({}) → false
isIterable(new Map()) → true


















