为什么我在控制台中“未定义”?

时间:2014-08-20 03:12:12

标签: javascript jquery

这是我的代码:

var textArray = ['#text1', '#text2', '#text3', '#text4',
'#text5', '#text6', '#text7', '#text8']

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

不确定为什么我在控制台中未定义。我觉得我错过了很简单的事情。

4 个答案:

答案 0 :(得分:11)

JavaScript中的for…in循环遍历对象的键,而不是其值。您可以使用Array.prototype.forEach给予支持; $.each也可以作为后备,因为你正在使用jQuery。

var textArray = ['#text1', '#text2', '#text3', '#text4',
                 '#text5', '#text6', '#text7', '#text8'];

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

答案 1 :(得分:0)

由于i是数组中项目的索引,因此您需要使用textArray[i]来访问当前项目(如果您已记录i的值,则会显示0, 1,2 ... 7)。

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

答案 2 :(得分:0)

你可能想要像这样索引数组:

var textArray = ['#text1', '#text2', '#text3', '#text4',
'#text5', '#text6', '#text7', '#text8']

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

答案 3 :(得分:0)

您不应使用for..in循环遍历数组。这意味着循环对象{}

使用以下

$('#capture').click(function() {
    $.each(textArray, function(value) {
        console.log($(value).offset());
    })
});

您可以使用Array#forEach,但IE8不支持forEach,因此我使用jQuery的each进行了此操作。