数组中的未定义元素

时间:2015-05-13 02:59:23

标签: javascript arrays for-loop

不太清楚如何说出这个问题。

当我这样做时

function reverseArray(array) {
  var arr = [];
  for(i = 0; i <= array.length; i++)
    arr.unshift(array[i]);
  return arr;
}

然后用console.log(reverseArray(["A", "B", "C"]));调用它我的输出是:

[undefined, "C", "B", "A"]

但是当我在for循环中从array.length中减去1时,就像这样

function reverseArray(array) {
  var arr = [];
  for(i = 0; i <= array.length - 1; i++)
    arr.unshift(array[i]);
  return arr;
}

我完全得到了我的期望,即:["C", "B", "A"]

是什么给出了?

3 个答案:

答案 0 :(得分:3)

因为数组索引从0到长度为1,所以当i<=array.length变为i array.length时,您使用array[i]的循环将是未定义的。

因此,在for循环中,您需要i=0; i<array.length

&#13;
&#13;
function reverseArray(array) {
  var arr = [];
  for (i = 0; i < array.length; i++)
    arr.unshift(array[i]);
  return arr;
}
console.log(reverseArray(["A", "B", "C"]));
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您传递的array变量(例如["A", "B", "C"])长度为3项。

你的病情

for(i = 0; i <= array.length; i++)

将迭代4次而不是3次。

当它查找array[3]时,没有任何内容,因此undefined已移位。

答案 2 :(得分:1)

不是很明显吗?数组索引从0到(长度 - 1)。所以你取消移位的最后一个值是数组[length]超出边界因此是未定义的!

以下jsbin将帮助您理解

jsBin