关于javascript:为什么我在控制台中得到”未定义”?

Why am I getting 'undefined' in console?

本问题已经有最佳答案,请猛点这里访问。

这是我的代码:

1
2
3
4
5
6
7
8
var textArray = ['#text1', '#text2', '#text3', '#text4',
'#text5', '#text6', '#text7', '#text8']

$('#capture').click(function() {
    for (var i in textArray) {
      console.log($(i).offset());
    }
});

不知道为什么控制台中没有定义。我觉得我错过了一些非常简单的东西。


javascript中的for…in循环通过对象的键而不是其值进行循环。在提供支持的情况下,您可以使用Array.prototype.forEach$.each也可以作为回退,因为您使用的是jquery。

1
2
3
4
5
6
7
8
var textArray = ['#text1', '#text2', '#text3', '#text4',
                 '#text5', '#text6', '#text7', '#text8'];

$('#capture').click(function() {
    textArray.forEach(function (x) {
        console.log($(x).offset());
    });
});

您不应该使用for..in在数组上循环。这是为了循环对象{}

使用如下

1
2
3
4
5
$('#capture').click(function() {
    $.each(textArray, function(value) {
        console.log($(value).offset());
    })
});

你可以使用Array#forEach,但是ie8不支持forEach,所以我使用jquery的each


您可能希望像这样对数组进行索引:

1
2
3
4
5
6
7
8
var textArray = ['#text1', '#text2', '#text3', '#text4',
'#text5', '#text6', '#text7', '#text8']

$('#capture').click(function() {
for (var i in textArray) {
  console.log($(textArray[i]).offset());
}
});

因为i是数组中项目的索引,所以需要使用textArray[i]访问当前项目(如果您记录了i的值,它将显示0,1,2…7)。

1
2
3
for (var i in textArray) {
  console.log($(textArray[i]).offset());
}