新闻中心

J*aScript中for...of与for...in循环区别_j*ascript技巧

2025-11-03
浏览次数:
返回列表
for...in遍历对象的可枚举属性名,包括继承属性,适用于对象;for...of遍历可迭代对象的值,如数组、字符串等,不适用于普通对象。

javascript中for...of与for...in循环区别_javascript技巧

for...offor...in 是 J*aScript 中两种不同的循环语法,虽然写法相似,但用途和行为有本质区别。理解它们的差异有助于在实际开发中正确选择使用场景。

for...in 遍历对象的键(key)

for...in 用于遍历对象的**可枚举属性名**(即键),包括自身和继承的属性(来自原型链)。它适用于普通对象,不推荐用于数组。

常见用法:

  • 遍历对象的所有可枚举属性
  • 获取属性名进行操作
const obj = { a: 1, b: 2, c: 3 };
for (let key in obj) {
  console.log(key); // 输出: "a", "b", "c"
}

注意:如果对象的属性来自原型链或被设置为不可枚举,可能不会按预期输出。建议配合 hasOwnProperty 使用以避免遍历继承属性:

for (let key in obj) {
  if (obj.hasOwnProperty(key)) {
    console.log(key, obj[key]);
  }
}

for...of 遍历可迭代对象的值(value)

for...of 用于遍历实现了 Iterable 接口的对象,如数组、字符串、Map、Set、arguments 等。它直接获取的是元素的,而不是键。

OneStory OneStory

OneStory 是一款创新的AI故事生成助手,用AI快速生成连续性、一致性的角色和故事。

OneStory 319 查看详情 OneStory

适用对象:

  • Array
  • String
  • Map
  • Set
  • arguments
  • NodeList(DOM 节点集合)
const arr = [10, 20, 30];
for (let value of arr) {
  console.log(value); // 输出: 10, 20, 30
}
const str = "hi";
for (let char of str) {
  console.log(char); // 输出: "h", "i"
}

for...of 不适用于普通对象,因为普通对象默认不可迭代。尝试对普通对象使用会报错:

const obj = { a: 1 };
// for (let v of obj) { } // 报错:obj is not iterable

关键区别总结

特性 for...in for...of
遍历目标 对象的可枚举属性名(key) 可迭代对象的值(value)
适用对象 所有对象(包括数组) 数组、字符串、Map、Set 等可迭代对象
是否包含继承属性 是(需用 hasOwnProperty 过滤)
能否用于普通对象 可以 不可以(会报错)
顺序 不一定保证顺序(尤其非整数键) 按插入或索引顺序

使用建议

  • 遍历数组元素值时,优先使用 for...of
  • 遍历对象的属性时,使用 for...in,并检查 hasOwnProperty
  • 需要同时获取索引和值时,数组可用 entries() 配合 for...of:
for (let [index, value] of arr.entries()) {
  console.log(index, value);
}

基本上就这些。掌握它们的核心差异,能让你写出更清晰、安全的循环代码。

以上就是J*aScript中for...of与for...in循环区别_j*ascript技巧的详细内容,更多请关注其它相关文章!


# java  # node  # 区别  # 可迭代对象  # 遍历  # 迭代  # 如何实现  # javascript  # 珠宝首饰营销推广方案  # 中国机器人推广网站有哪些  # 果洛做网站推广  # 国外的推广网站新闻  # 宜春全屏营销推广  # 公司怎么推广自己的网站  # 长沙网站推广  # 北京抖音SEO电商  # 字节seo是什么  # 柳州网站建设单价  # 不可以  # 两种  # 不适用于  # 的是  # 如何处理  # 适用于  # 报错 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: b站怎么删除评论_b站评论管理与删除操作  KFC游戏互动怎么赢取优惠券_KFC线上游戏活动参与与优惠代码赢取教程  自定义Bag-of-Words实现:处理带负号的词汇权重  斑马英语APP如何开启夜间护眼阅读_斑马英语APP夜间模式与低蓝光设置教程  Lar*el Excel导入时生成自定义递增ID的策略与实践  Descript怎样用AI剪辑自动去噪_Descript用AI剪辑自动去噪【自动降噪】  Safari怎么安装扩展程序 浏览器插件安装与管理方法【详解】  mysql密码锁定怎么解锁_mysql密码锁定解锁后修改密码步骤  将HTML Canvas内容转换为可上传的图像文件(File对象)  c++ 命名空间怎么用 c++ namespace使用指南  快手官方唯一登录入口 谨防山寨钓鱼网站  Golang如何通过reflect获取匿名字段方法_Golang reflect匿名字段方法访问技巧  PDO预处理语句中冒号的正确处理:区分SQL函数格式与命名占位符  荒野行动PC版怎么注册_荒野行动PC版账号注册详细流程图文教程  AO3最新镜像入口 Archive of Our Own官方平台访问  AO3最新入口2025公告_AO3中文官网合集  Win11怎么开启卓越性能模式 Win11电源选项启用高性能释放硬件潜力【方法】  Animex动漫社网入口地址 Animex动漫社网正版在线入口  我的世界mc.js免费游戏直接能玩 我的世界mc.js小游戏免费秒玩入口  三星ZFold5多任务卡顿_Samsung ZFold5流畅度提升  BetterDiscord插件中安全更新用户简介的实践指南  Lar*el递归关系中排除子孙节点的策略  天猫双十一预售商品怎么退款_天猫双十一预售退款操作指南  抖音怎么赚钱_抖音创作者变现方法与途径指南  QQ官网正版登录链接 QQ在线登录入口最新  J*a里如何使用N*igableMap进行导航操作_可导航Map操作技巧解析  sublime如何配置Python开发环境_将sublime打造成轻量级Python IDE  处理Kafka消费者会话超时:深入理解消息处理语义与幂等性  C++20的source_location是什么_C++在编译期获取源码位置信息用于日志和断言  J*aScript设计模式实践_j*ascript代码优化  J*a 递归快速排序中静态变量的状态管理与陷阱  微博网页版官方账号登录 微博网页版内容浏览使用指南  文心一言怎样用批量生成做多版文案_文心一言用批量生成做多版文案【批量创作】  邮政快递单号查询入口 邮政快递物流信息在线查询入口  在J*a中如何使用BigDecimal进行高精度计算_BigDecimal类应用指南  C++ explicit关键字防止隐式转换_C++构造函数安全规范  Go语言中动态执行代码字符串的策略与实践  电脑安装程序提示“错误1722”怎么办_Windows Installer服务问题解决【教程】  抖音网页版企业服务中心登录入口_抖音网页版企业登录平台  深入理解Promise链:如何在catch后中断then的执行  c++中的std::forward_list和std::list有什么不同_c++ forward_list与list区别分析  Lar*el如何生成PDF或Excel文件_Lar*el文档导出工具与使用教程  Lar*el 递归关系中排除指定分支的教程  网站内容防复制粘贴的实现策略与局限性  《燕云十六声》两周内达九百万玩家!位居畅销榜第五  汽水音乐车机版横屏版7.1 汽水音乐车机版横屏版下载入口  DLsite中文平台入口 DLsite官网内容在线查看  响应式图片在网页设计中的正确实现方法  海棠账号登录入口_登录海棠账户同步阅读记录  Node.js CSV 数据处理:基于字段值条件过滤整条记录的策略 

搜索