在Javascripts中将对象插入数组会引发未捕获的TypeError

时间:2017-01-01 13:43:39

标签: javascript

我正在创建pos对象并将它们插入到数组中。

以下是非常好的代码。

var pos1={lat:25,long:56};
var pos2={lat:100,long:200};
var pos3={lat:-63,long:-29};
var objects=[];
objects.push(pos1);
objects.push(pos2);
objects.push(pos3);
console.log(objects[0].lat+","+objects[0].long);
console.log(objects[1].lat+","+objects[1].long);
console.log(objects[2].lat+","+objects[2].long);

输出

enter image description here

然后我尝试在循环中使用随机数插入一些对象。正是在这一点上它产生了错误。

未捕获的TypeError:Pos对象在循环之外

var locations=[];
var pos={lat:0,long:0}; //Here post object is outside the loop
size=10;
for(var i=1;i<=size;i++){

var x=Math.floor(1+Math.random()*10);
var y=Math.floor(1+Math.random()*10);
pos.lat=x;
pos.long=y;
locations.push(pos);
}

for(var i=1;i<=size;i++){
console.log(locations[i].lat+","+locations[i].long);
}

输出

enter image description here

未捕获的TypeError:当Pos对象在循环内时

var locations=[];

size=10;
for(var i=1;i<=size;i++){
var pos={lat:0,long:0};   //pos object inside the loop
var x=Math.floor(1+Math.random()*10);
var y=Math.floor(1+Math.random()*10);
pos.lat=x;
pos.long=y;
locations.push(pos);
}


for(var i=1;i<=size;i++){
console.log(locations[i].lat+","+locations[i].long);
}

输出

enter image description here

我不知道为什么我会收到这些错误。我的理解是,当访问位置数组时,我需要将其关联到pos对象吗?

3 个答案:

答案 0 :(得分:3)

i应该从0这样开始:

for(var i=0;i < size;i++){
    console.log(locations[i].lat+","+locations[i].long);
}

array索引从zero开始,以小于1的大小结束。

答案 1 :(得分:2)

编程数组索引从零开始 所以当大小为5时,例如索引是0,1,2,3,4 ..看看最后一个索引是4 ..

在你的情况下你迭代到<=size试图访问不存在的元素,这就是你得到错误的原因

i = 0 ; i < 10应该修复它

答案 2 :(得分:1)

从0开始的数组索引,因此i必须从0开始,并且只应<而不是<=

&#13;
&#13;
var locations = [];

size = 10;
for (var i = 1; i <= size; i++) {
    var pos = {
        lat: 0,
        long: 0
    }; //pos object inside the loop
    var x = Math.floor(1 + Math.random() * 10);
    var y = Math.floor(1 + Math.random() * 10);
    pos.lat = x;
    pos.long = y;
    locations.push(pos);
}

for (var i = 0; i < size; i++) {
    console.log(i, locations[i].lat + "," + locations[i].long);
}
&#13;
&#13;
&#13;