我试图通过解决Flanagan,JS:The Definitive Guide中的问题来学习JS。如果有人指出我的代码中的错误,我将不胜感激。目标是创建一个与数组a具有相同属性的新数组b。我不明白有两个主要结果:
这是我的代码:
var a = [1, 2, 3];
var b = [];
for (var i = 0; i < a.length; i++);
b[i] = a[i];
alert(b[0]);
var equalArrays = function (a,b) {
if (a.length !== b.length) return false;
if (a[i] !== b[i]) return false;
else return true;
};
alert (equalArrays(a,b));
答案 0 :(得分:2)
这里的问题是你的forloop永远不会运行 - 你在循环条件之后放置一个分号(;
),因此它永远不会识别b[i] = a[i];
行作为for循环。
要解决此问题,只需删除分号:
var a = [1, 2, 3];
var b = [];
for (var i = 0; i < a.length; i++)
b[i] = a[i];
alert(b[0]);
为了使它更清晰,您还可以在循环内容周围添加大括号。这将使得犯这样的错误变得更加困难。 forloop的代码将是:
for (var i = 0; i < a.length; i++) {
b[i] = a[i];
}
答案 1 :(得分:2)
for (var i = 0; i < a.length; i++);
b[i] = a[i];
分号将其拧紧。最好使用{}
来提高可读性。
for (var i = 0; i < a.length; i++) {
b[i] = a[i];
}
答案 2 :(得分:1)
你的for循环结束时有一个;
所以它只会将i
增加到4。
然后在下一行,您指定b[4] = a[4]
来解释您的问题(b[0]
为undefined
和b
的长度为4)。只需删除;
。
for (var i = 0; i < a.length; i++)
b[i] = a[i];
在IDE中自动缩进或在{ ... }
中包裹您的正文有助于注意这些类型的错误。
答案 3 :(得分:1)
将您的for循环更改为
for (var i = 0; i < a.length; i++)
b[i] = a[i];
(跳过;“for line”的结尾处。)
或者通过像这样替换for循环来更清楚:
for (var i = 0; i < a.length; i++)
{
b[i] = a[i];
}
这实际上意味着相同但可能更容易理解,括号中的代码部分会在每次for循环迭代时执行。
答案 4 :(得分:1)
虽然for
语句在技术上可以使用后面的单个执行语句运行,但为了清楚起见,大多数人甚至使用单个语句来使用块。
for (var i = 0; i < a.length; i++) {
b[i] = a[i];
}
代码中执行语句之前的分号表示循环运行a.length
次而不执行任何操作。
您还应该查看数组访问的.slice()
操作。