迭代jQuery $(this).attr('class').split("")给出奇怪的结果

Sam*_*ing 10 javascript css arrays iteration jquery

我有一个页面,我正在尝试获取许多共享一个公共类的div的类数组.例如:

<div class="common lorem ipsum"></div>
<div class="common dolor sit"></div>
<div class="common hello world"></div>
Run Code Online (Sandbox Code Playgroud)

我想获取每个common类div并获取它的类的数组.目前,我正在通过使用这个jQuery来做到这一点:

$('.common').each(function(index) {
  var classes = $(this).attr('class').split(" ");
  for(var i in classes) {
    alert(classes[i]);
  }
});
Run Code Online (Sandbox Code Playgroud)

查看第一个结果classes变量给出了:

classes: Array (3)
0: "common"
1: "lorem"
2: "ipsum"
length: 3
__proto__: Array
Run Code Online (Sandbox Code Playgroud)

问题是,for(var i in classes)似乎是在迭代__proto__阵列并深入研究它 - 有没有人曾经遇到过这个问题?我使用的是最新版本的Chrome(6.0.453.1).

med*_*iev 17

for ( var i = 0, l = classes.length; i<l; ++i ) {
 alert( classes[i] );
}
Run Code Online (Sandbox Code Playgroud)

使用常规for循环遍历数组,而不是for...in通过数组的属性枚举它(因为它仍然是一个对象,除了里面的元素之外还有其他属性).

  • +1避免陷阱:) http://stackoverflow.com/questions/3154215/what-are-the-most-common-causes-of-errors-in-javascript-and-how-to-fix-them/3154285# 3154285 (2认同)