JavaScript代码在输出中打印额外的行(未定义)

时间:2015-06-22 19:59:15

标签: javascript constructor

需要有关此代码的帮助。我做错了什么?

问题: 创建10辆汽车,每辆车都有颜色和数字。车辆应按0到9的顺序编号.0到4的车应该是“绿色”,5到9的车应该是“蓝色”。将汽车整理成一个名为carGarage的阵列。

准则: 为了避免在创建10个单独的汽车时出现重复代码,首先要创建一个构造函数Car,它接受颜色和数字参数并将它们设置为this.color和this.number。然后创建10辆汽车,并将它们放在carGarage阵列中。

// create a car constructor function
var Car = function(color, number) {
    this.color = color;
    this.number = number;
}
// create a carGarage array
var carGarage = [10];
// create a loop that creates cars and places them in carGarage
for (var i = 0; i <= 9; i++) {
    var color, number;
    i <= 4? color = 'green': color = 'blue';
    number = i;
    var newCar = new Car(color, number);
    carGarage.push(newCar);

}
// test code
for (var i = 0; i < carGarage.length; i++) {
   car = carGarage[i];
   console.log(car.color + " car #" + car.number);
}

预期输出

green car #0
green car #1
green car #2
green car #3
green car #4
blue car #5
blue car #6
blue car #7
blue car #8
blue car #9

实际输出

undefined car #undefined
green car #0
green car #1
green car #2
green car #3
green car #4
blue car #5
blue car #6
blue car #7
blue car #8
blue car #9

1 个答案:

答案 0 :(得分:2)

这一行是关键:

var carGarage = [10];

您已使用一个元素初始化数组 - 10,而不是长度为10的数组。您必须将其更改为:

var carGarage = [];

所以你初始化空数组。

您有2次undefined,因为未定义10.color10.number