for each...in
使用一个变量迭代一个对象的所有属性值,对于每一个属性值,有一个指定的语句块被执行.
for each...in
是 ECMA-357 (E4X) 标准的一部分, 大部分非Mozilla浏览器都没有实现该标准, E4X并不是 ECMAScript 标准的一部分.
作为ECMA-357(E4X)标准的一部分,for each...in语句已被废弃,E4X中的大部分特性已被删除,但考虑到向后兼容,for each...in只会被禁用而不会被删除,可以使用ES6中新的for...of语句来代替.
语法:
1 2 3 | for each (variable in object) { statement } |
参数:
variable
- 用来遍历属性值的变量,前面的
var
关键字是可选的.该变量是函数的局部变量而不是语句块的局部变量.
object
- 该对象的属性值会被遍历.
statement
- 遍历属性值时执行的语句. 如果想要执行多条语句, 请用(
{ ... }
) 将多条语句括住.
一些对象的内置属性是无法被遍历到的,包括所有的内置方法,例如String对象的indexOf
方法.不过,大部分的用户自定义属性都是可遍历的.
警告:永远不要使用for each...in语句遍历数组,仅用来遍历常规对象。
for...in
以任意顺序遍历一个对象的可枚举属性。对于每个不同的属性,语句都会被执行。
语法:
1 | for (variable in object) {...} |
参数:
variable
- 在每次迭代时,将不同的属性名分配给变量。
object
- 被迭代其枚举属性的对象。
for..in
不应该被用来迭代一个下标顺序很重要的 Array
.
数组索引仅是可枚举的整数名,其他方面和别的普通对象属性没有什么区别。for...in 并不能够保证返回的是按一定顺序的索引,但是它会返回所有可枚举属性,包括非整数名称的和继承的。
因为迭代的顺序是依赖于执行环境的,所以数组遍历不一定按次序访问元素。 因此当迭代那些访问次序重要的 arrays 时用整数索引去进行 for
循环 (或者使用 Array.prototype.forEach()
或 for...of
循环) 。
仅迭代自身的属性
如果你只要考虑对象本身的属性,而不是它的原型,那么使用 getOwnPropertyNames()
或执行 hasOwnProperty()
来确定某属性是否是对象本身的属性 (也能使用propertyIsEnumerable
)。另外,如果你知道外部不存在任何的干扰代码,你可以扩展内置原型与检查方法。
1 2 3 4 5 6 7 8 9 10 | var obj = {a:1, b:2, c:3}; for ( var prop in obj) { console.log( "obj." + prop + " = " + obj[prop]); } // Output: // "obj.a = 1" // "obj.b = 2" // "obj.c = 3" |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | var triangle = {a:1, b:2, c:3}; function ColoredTriangle() { this .color = "red" ; } ColoredTriangle.prototype = triangle; var obj = new ColoredTriangle(); for ( var prop in obj) { if ( obj.hasOwnProperty( prop ) ) { console.log( "o." + prop + " = " + obj[prop]); } } // Output: // "o.color = red" |
for...of
ECMAScript 6新方法,使用时参考https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/for...of
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用