繁体   English   中英

数组循环中的Javascript对象

[英]Javascript object in array Loop

以下是代码学院的编码练习,其目的是打印出name属性。 你能解释一下这个错误吗?我该怎么办呢? 我的代码看起来像:

 // Our Person constructor
 function Person(name, age) {
 this.name = name;
 this.age = age;
 }

var family = new Array();
family[0] = new Person("alice", 40);
family[1] = new Person("bob", 42);
family[2] = new Person("michelle", 8);
family[3] = new Person("timmy", 6);

for (var i = 0; i <= family.length; i++) {
console.log (family[i].name);
};  
// Now we can make an array of people

// loop through our new array

OUTPUT :
alice
bob
michelle
timmy

---
We're running a test below to make sure your code works.
alicebobmichelletimmy
TypeError: Cannot read property 'name' of undefined

------------------------------------------
Many thanks. 

如在评论中,但要解释错误(以便你从错误中学习并理解它导致错误的原因): - 你正在运行一个循环,它具有:

for (var i = 0; i <= family.length; i++) {

这导致了问题,因为数组是零索引的 - 这意味着如果你有

family[0] = new Person("alice", 40);
family[1] = new Person("bob", 42);
family[2] = new Person("michelle", 8);
family[3] = new Person("timmy", 6);

那么你将拥有长度为4的族数组,但其索引为0 -3。

这意味着当你有i <= family.length时,你试图找到一个索引为4的元素 - 它不存在,因此抛出错误。

如上所述,你只需要删除for循环中的=,一切都会很好,因为我永远不会达到4并且将停在3 - 数组中的最高索引。

 for (var i = 0; i < family.length; i++) {

在循环中,您正在用尽数组的边界。 考虑以下。

我有一个包含3个项目的数组,索引是0,1,2。如果我使用<=运算符作为循环条件,它将产生这个结果:0,1,2,3。由于3不存在,它是undefined,它找不到属性名称。

数组是从0开始的,这意味着索引从零开始。 如果我们有一个包含3个元素的数组,则长度为3,但最大索引为2(0,1,2)。 如果for循环继续循环,即使索引等于长度,它也将返回undefined,因为数组中的元素不存在。

在您的情况下,数组中有4个元素,所有Person对象。 它们由索引0,1,2和3访问。如果循环在3之后继续并检查i是否等于长度(4),它将尝试检查数组的第4个元素,这不是'因为数组长度只有4个元素而不是5个,所以存在。

像这样重写for循环:

for (var i = 0; i < family.length; i++) {
    console.log (family[i].name);
}; 

这将阻止循环迭代到未知索引。 当所有元素都循环通过时,它会停止循环。

你的行说: for (var i = 0; i <= family.length; i++) {

应该说: for (var i = 0; i < family.length; i++) {

这是更正后的代码:

  // Our Person constructor function Person(name, age) { this.name = name; this.age = age; } var family = new Array(); family[0] = new Person("alice", 40); family[1] = new Person("bob", 42); family[2] = new Person("michelle", 8); family[3] = new Person("timmy", 6); for (var i = 0; i < family.length; i++) { console.log (family[i].name); }; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM