判断和解决TypeError: 'x' is not iterable报错信息的应用 - Web前端
作者:98wpeu发布时间:2026-09-07分类:网页前端技术浏览:7
导读:一起来理解下判断和解决typeerror:'x'isnotiterable的报错信息的应用。报错不可怕,可怕的是你没找到方法,然后抓狂几小时没效果,啊哈哈。错误提示:Typ...

一起来理解下判断和解决typeerror: 'x' is not iterable的报错信息的应用。报错不可怕,可怕的是你没找到方法,然后抓狂几小时没效果,啊哈哈。
错误提示:
TypeError: 'x' is not iterable (firefox, Chrome) TypeError: 'x' is not a function or its return value is not iterable (chrome)
发生了什么错误?
这个值作为 for…of 的表达式右值,或者作为一个函数的参数,如 Promise.all 或者 TypedArray.from, 不是一个 可迭代对象. 一个可迭代对象可以是一个内置可迭代类型,如array, string 或 map, 一个 Generator 生成结果, 或者一个实现了 可迭代协议 的对象。
示例
Iterating over Object properties
在javascript中, Object 是不可迭代的,除非它们实现了迭代协议. 因此, 你不能使用 for…of 来迭代对象的属性.
var obj = { 'France': 'Paris', 'England': 'London' };
for (let p of obj) { // TypeError: obj is not iterable
// …
}做为替代你必须使用 Object.keys 或 Object.entrIEs 来迭代对象的属性或属性值。
var obj = { 'France': 'Paris', 'England': 'London' };
// 迭代属性名称:
for (let country of Object.keys(obj)) {
var cAPItal = obj[country];
console.log(country, capital);
}
for (const [country, capital] of Object.entries(obj))
console.log(country, capital);这次case的另外一个选择是使用 Map:
var map = new Map;
map.set('France', 'Paris');
map.set('England', 'London');
// Iterate over the PRoperty names:
for (let country of map.keys()) {
let capital = map[country];
console.log(country, capital);
}
for (let capital of map.values())
console.log(capital);
for (const [country, capital] of map.entries())
console.log(country, capital);Iterating over a generator
Generators 是用来生成可迭代对象的函数。
function* generate(a, b) {
yield a;
yield b;
}
for (let x of generate) // TypeError: generate is not iterable
console.log(x);当它没有被调用, 这个 Function 相应的是可调用的,但是不可迭代。 调用 generator 生成一个可迭代对象,该对象将迭代在生成器执行期间生成的值。
function* generate(a, b) {
yield a;
yield b;
}
for (let x of generate(1,2))
console.log(x);Iterating over a custom iterable
可以使用Symbol.iterator 方法去实现一个自定义迭代器。你必须确定自定义的迭代器方法返回一个迭代器对象,即它必须有一个next()。
const myemptyIterable = {
[Symbol.iterator]() {
return [] // [] is iterable, but it is not an iterator -- it has no next method.
}
}
Array.from(myEmptyIterable); // TypeError: myEmptyIterable is not iterable下面是正确用法:
const myEmptyIterable = {
[Symbol.iterator]() {
return [][Symbol.iterator]()
}
}
Array.from(myEmptyIterable); // []差不多这些内容了,大家试试吧。
相关推荐
- React中功能组件和类组件之间的区别 - Web前端
- 使用React Hooks和TypeScript - Web前端
- 带大家学习一款很实用的Vue多选列表组件:multiselect - Web前端
- 如何将您的应用程序从Express迁移到Fastify - Web前端
- 如何在MySQL数据库中使用JSON数据字段 - Web前端
- 产品经理为何要学习Web前端编码 - Web前端
- Vue内置组件:熟悉keep-alive的来龙去脉 - Web前端
- React开发:提交输入框input值的小应用 - Web前端
- 使用现代JavaScript和Web组件构建Web应用程序 - Web前端
- Windows 10:绘画和截图工具现在可以从Microsoft Store更新 - Web前端
- 网页前端技术排行
-
- 1[Web前端]用javascript实现默认图片替代未显示的图片 - Web前端
- 2分析Iconfont-阿里巴巴矢量常用图标库 - Web前端
- 3jQuery实例教程:制作网页中可折叠的面板 - Web前端
- 4【第六章】Foundation之按钮和下拉功能 - Web前端
- 5基于jquery的滚动条滚动固定div(附演示下载) - Web前端
- 6jQuery编写widget的一些技巧分享 - Web前端
- 7分享精心挑选的12款优秀jQuery Ajax分页插件和教程 - Web前端
- 8jQuery实现鼠标移到元素上动态提示消息框效果 - Web前端
- 9在Mac/PC上远程调试iPhone/iPad上的网页 - Web前端
- 最近发表
-
- WordPress随机显示特色图片插件:Random Post Thumbnails
- KeePass实现Chrome浏览器自动填充密码方法一
- LNMP一键包nginx 301强制跳转到https教程
- KeePass实现Chrome浏览器自动填充密码方法二
- #建站# 免费的VPS管理软件Xshell8/Xftp8中文版下载
- 使用Xshell 8连接VPS教程_电脑登录vps的方法
- WordPress评论界面添加烟花????效果
- 不同浏览器书签同步方案:坚果云+Floccus_详细使用教程
- iOS端KeePassXC客户端APP:Strongbox Password Safe
- 给WordPress评论中的Gravatar头像图片添加ALT属性


