var names = ["Patrick", "Lizzy", "Walty"];
for (var i = 0; i < 3; i += 1) {
console.log("My name is: " + names[i]);
};
while (names) {
console.log("According to the while loop, my name is " + names[i]);
var names = false;
};
这是打印出来的代码:
My name is: Patrick
My name is: Lizzy
My name is: Walty
My name is: undefined
According to the while loop, my name is undefined
为什么while循环返回&#34; undefined&#34;而不是三个名字中的每一个?任何帮助将不胜感激!
答案 0 :(得分:2)
你有两个问题:
i
仍然有效并设置为3
。names
始终为真。因此,您的while
循环等同于:
var names = true; // coercion!
while (names) {
console.log("According to the while loop, my name is " + names[3]);
var names = false;
};
你应该在进入while循环之前重置计数器,然后在进行时递增它:
var i = 0;
while (i < 3) {
console.log("According to the while loop, my name is " + names[i]);
++i;
};
请记住,for
循环只是while
循环的糖,允许您在开头声明计数器。
您可以引入names.length
来替换常量3
并更加惯用地处理数组:
for (var i = 0; i < names.length; i += 1) {
console.log("My name is: " + names[i]);
};
var i = 0;
while (i < names.length) {
console.log("According to the while loop, my name is " + names[i]);
++i;
};
如果您想使用现代功能并变得聪明,可以在数组上使用forEach
方法:
names.forEach(function (name) {
console.log("My name is: " + name);
});
这样,您根本不必担心循环或索引。
如果names
可能不是数组,则可以使用ES6语法遍历任何可迭代对象:
for (const name of names) {
console.log('My name is:', name);
}
答案 1 :(得分:0)
您过早地打破了for
循环。这就是原因。在这种情况下,您在;
之后也不需要}
。
您获得undefined
的原因是,while
循环时,i
的值为3
,超出names
数组的大小。
names
返回的布尔值始终为true,因此无论如何都会执行。
var names = ["Patrick", "Lizzy", "Walty"];
for (var i = 0; i < 3; i += 1) {
console.log("My name is: " + names[i]);
}
// Here the value of i is 3, which is out of bounds. So try using i-1:
while (names) {
console.log("According to the while loop, my name is " + names[i-1]);
var names = false;
}
&#13;
答案 2 :(得分:0)
当const arr = [1,2,3,2,4,1,5,1,6];
const r = {};
arr.forEach(e=>r[e]?r[e].push(e):r[e]=[e]);
console.log(r);
循环退出时,for()
的值为i
。然后使用该3作为数组的索引,但是您的数组只有键0-> 2的值