【发布时间】:2016-07-24 14:45:19
【问题描述】:
我目前正在 freecodecamp 上学习 JavaScript,他们在其中一项练习中有一个嵌套 for 循环的示例:
var arr = [[1,2], [3,4], [5,6]];
for (var i=0; i < arr.length; i++) {
for (var j=0; j < arr[i].length; j++) {
console.log(arr[i][j]);
}
}
使用 console.log = 1 2 3 4 5 6 未定义。
我或多或少地了解 for 循环,并且我了解 [i] 和 [j] 用于访问数组(我认为?)。我只是不明白为什么最后它只打印出这些数字?我发现几年前有人问过这个问题,但它只是解释了如何编写它们,而不是它们如何工作:
For loop in multidimensional javascript array
我把它分解成:
var arr = [ [1,2], [3,4], [5,6]];for (var i=0; i < arr.length; i++) {
console.log(arr[i]);}
打印出来的
[ 1, 2 ]
[ 3, 4 ]
[ 5, 6 ]
undefined
和
var arr = [ [1,2], [3,4], [5,6]];
for (var i=0; i < arr.length; i++) {
for (var j=0; j < arr[i].length; j++) {
console.log(arr[i]); }}
打印出来的:
[ 1, 2 ]
[ 1, 2 ]
[ 3, 4 ]
[ 3, 4 ]
[ 5, 6 ]
[ 5, 6 ]
undefined
和
var arr = [ [1,2], [3,4], [5,6]];
for (var i=0; i < arr.length; i++) {
for (var j=0; j < arr[i].length; j++) {
console.log(arr[j]); }}
打印出来
[ 1, 2 ]
[ 3, 4 ]
[ 1, 2 ]
[ 3, 4 ]
[ 1, 2 ]
[ 3, 4 ]
undefined
我理解前两个 arr[i]。循环遍历数组并打印出单个元素(在本例中为数组),在第二个中我猜它只执行了两次,因为有两个循环。我不明白的是:
- 为什么没有打印出 arr[j] 中的最后一个数组( [5, 6] 去?)
- 为什么 arr[i][j] 突然消除了数组而只是 打印出数字
- “未定义”的来源
谁能帮我解决这个问题并解释代码在控制台中打印之前所采取的步骤?我真的很想理解它,但我什至不知道如何以正确的方式搜索这个问题。
【问题讨论】:
-
别担心最后的
undefined;这是console.log()解释代码的副产品。 -
那是不正确的。 stellatores 在最后得到一个未定义的原因是因为他在最后一个 for 循环中增加 i 在它到达 j 循环之前以达到条件。 For 循环将始终运行一次,并且仅在满足条件时停止。在这种情况下,最后一个循环将 i 推入等于 7,并且数字数组中没有第 7 个位置。这导致未定义,因为数组位置根本没有分配给它的数字。
-
@Korgrue 不,Pointy 是对的。 i 循环在终止之前仅从 0 运行到 2。
undefined是for语句的返回值。console.log('Hi')做同样的事情:它输出 'Hi' 然后未定义。 -
在这里我认为这与代码有关。谢谢
标签: javascript for-loop