我一直在努力学习Javascript的时间最长,这有点令人沮丧。我又回来学习基础知识了,我正在玩下面这些for
循环和数组。
有人可以解释为什么此代码的输出是[1,2,3,4,5]
而不是[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]
?
var game1 = new Array();
for(i = 25; i > "love is like a river".length; i = i - 1) {
console.log(game1.push(i));
}
答案 0 :(得分:3)
length属性返回字符串的长度(字符数)。这样"love is like a river".length
给出了20.我认为你把它误认为是。的话。然后循环将表现得像
var game1 = new Array();
for(i = 25;i>20;i=i-1){
console.log(game1.push(i));
}
要获得预期答案,代码将是:
var game1 = new Array();
for(i = 25;i>"love is like a river".length;i=i-1){
console.log(game1.push(i));
}
答案 1 :(得分:3)
console.log(game1.push(i));
这句话的作用是向控制台打印被推送元素的索引。结果1,2,3,4,5是数组的长度。
您想要编码的是:
var game1 = [];
for(i = 25; i > "love is like a river".length; i--){
console.log(i);
game1.push(i);
}
在上面的示例中,我切换了数组的声明,因为这是最常见的方式(这不是必需的)。它仍然可以正常使用您的声明版本。在for循环中,我已经切换
i = i - 1;
简写版:
i-- or --i
将'i'递减1.我也分开了
console.log(i) and game1.push(i) to be separate
这将打印出'i'的结果:25,24,23,22,21 这是因为for循环执行用户在循环结束时定义的操作,因此当循环打印出21并将其推送到数组时,它会递减到20,循环停止。该数组仍将具有数字25,24,23,22,21。但控制台不会记录它。
如果您想要上面定义的输出,则必须:
var game1 = [];
for(i = 6;i >= 25; i++){
game1.push(i);
console.log(game1[i-6]);
}
在这个你将'i'添加到game1导致[6,7,8,9,10,11,12,13,14 ... 25]并将变量记录在'i - 6的索引处”。这将导致方括号中的数字为“0,1,2,3,4,5”,从0开始,因为这是所有数组索引的起始位置。
答案 2 :(得分:2)
"love is like a river".length
是20.所以循环等同于:
for(i = 25; i>20; i=i-1){
}
话虽如此,你有5次调用console.log传递给它的以下参数:每个步骤:
game1.push(25)
game1.push(24)
game1.push(23)
game1.push(22)
game1.push(21)
不确切知道game1.push
到底是做什么的,很难说清楚。但是,假设game1
是一个数组,您将在每次推送时获得数组的新长度。
根据MDN:
push()方法将一个或多个元素添加到数组和的末尾 返回数组的新长度。
答案 3 :(得分:2)
您获得[25, 24, 23, 22, 21]
的结果预期为game1
!
您看到的1
,2
,3
,...是您正在记录的Array push
calls的结果,每次都会产生数组的长度
答案 4 :(得分:2)
"love is like a river".length
为20
,因此您将从i=25
开始直到i=21
。
[1,2,3,4,5]
表示每个循环length
的{{1}}。
要查看game1
值:
game1
结果:for(i=0; i<game1.length; i++) {
console.log(game1[i]);
}
答案 5 :(得分:1)
让我们首先分解您的代码,首先是您存储在变量中的 new Array()
构造函数 的Game1 强>
var game1 = new Array();
此时,您所拥有的只是一个空 数组,它已存储在变量中,以便以后使用。顺便提一下,这相当于数组文字: var game1 = []
。
让我们一步一步到您的代码的下一部分,这是一个 for()
循环:
<强> for (i = 25; i > "love is like a river".length; i--) {}
强>
此循环在上限25 处初始化,并向下递减到下限<20> ,由 length()
<设置/ strong> 属性 条件 字符串。在此循环中,您有语句:
console.log(game1.push(i));
方法 push()
在数组的末尾添加一个或多个元素,返回 数组的新长度到堆栈。此方法依赖于 length属性来确定其注入点。因此,在迭代之前, game1 堆栈目前处于 0 ,因为您从未使用任何值填充数组 。当您执行迭代时, push()
方法会在每个步骤中向堆栈添加 undefined 值,通过增加< em> array 长度 1 。
这可以通过使用单个数字参数调用 game1 变量来说明,这将设置的初始大小阵列。这是一个例子:
var string = 'love is like a river';
var game1 = new Array(15);
for (i = 25; i > string.length; i--) {
console.log(game1.push(1));
}
如您所见,我将数字参数 15 传递给 new Array()
构造函数它将初始 game1 长度堆栈设置为15.因为我们从 25 (i = 25)减少到 20 (string.length)我们迭代 5 次,产生预期结果:[16,17,18,19,20]。
如果您正在寻找[6,7,8,...,25]的结果,您可以调整 for()
循环 < strong>递增而不是递减并将intitializer设置为6.以下是它的样子:
var s = "love is like a river";
for (i = 6; i <= s.length + 5; i++) {
console.log(i);
}