JavaScript中for...in与for...each...in的区别及兼容性分析

作者:青柠

时间:2026-10-29

浏览:290

本文详细对比了JavaScript中for...in与for...each...in两种遍历语句的区别。重点分析了for...each...in作为E4X标准在低版本IE浏览器中的兼容性问题,以及两者在获取属性名与属性值时的行为差异。建议遍历数组时使用原生for循环,遍历对象时优先选用兼容性更好的for...in。

文章目录

for...in与for...each...in的基本区别

区别一:

for...in语句最早发布于JavaScript 1.0版本。相比之下,for...each...in是作为E4X标准的一部分在JavaScript 1.6中引入的,它并不属于ECMAScript标准规范。这种标准归属上的差异导致了广泛的浏览器兼容性问题,许多浏览器并不支持for...each...in,例如IE6、IE7和IE8等均无法支持该语法。

区别二:

遍历行为与变量值差异

示例代码定义了一个名为长方形(ChangFangXing)的对象,包含高和宽两个属性:var 长方形= { 高:"15", 宽:"25" };


  for (var i in 长方形){
    alert( i + "," + 长方形[i] );
  }

使用for...in遍历该对象时,结果依次输出:属性名“高”与值“15”,接着是属性名“宽”与值“25”。


  for each (var i in 长方形){
    alert( i + "," + 长方形[i] );
  }

使用for...each...in遍历该对象时,结果依次输出:属性值“15”与undefined,接着是属性值“25”与undefined。

两种遍历方法中变量i的值含义不同。for...each...in无法获取对象的属性名,只能获取到属性值;而for...in可以获取属性名。

实际使用建议

最后总结一下使用建议:

(1)遍历普通数组时,建议使用原生的for循环,不要贪图方便。因为for...in和for...each...in均存在浏览器兼容性问题,且不能保证对数组的遍历顺序(如果对顺序不作要求,可以使用for...in,但本人不建议)。有兴趣的话,可以阅读下一篇文章《关于js中for in的缺陷浅析》。

(2)遍历对象时,由于原生for循环无法提供理想的遍历方式,因此只能选择其他方法。这里建议使用for...in。从上述讲解的区别来看,for...in比for...each...in更具优势,因为for...in能获取索引(属性名)和属性值,而for...each...in只能获取属性值,而且for...each...in在很多低版本的浏览器中是不支持的。

以上所述就是本文的全部内容了,希望大家能够喜欢

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章