在打字稿代码中,我有一个包含对象的数组。当我打电话给#34; getUsers(用户)"函数,它返回我需要的结果,但在控制台中我得到这个错误 "未捕获的TypeError:无法读取属性' firstName'未定义的 在getUsers(index.js:20) 在index.js:23"
let users = [
{
firstName: "John",
lastName: "Doe",
age: 34
},
{
firstName: "Jack",
lastName: "Jackson",
age: 23
},
{
firstName: "Ann",
lastName: "Watson",
age: 24
}
];
function getUsers(users) {
for (var i = 0; i <= users.length; i++) {
console.log(users[i].firstName + " is " + users[i].age + " years old!");
}
}
getUsers(users);
答案 0 :(得分:2)
问题在于i <= users.length
,它必须是i < users.length
。i++
会将i的值递增1,但长度为3,索引从0开始,因此元素被占用直到第二个索引,因此i <= users.length
实际上会尝试访问第三个索引中的元素
let users = [{
firstName: "John",
lastName: "Doe",
age: 34
},
{
firstName: "Jack",
lastName: "Jackson",
age: 23
},
{
firstName: "Ann",
lastName: "Watson",
age: 24
}
];
function getUsers(users) {
for (var i = 0; i < users.length; i++) {
console.log(users[i].firstName + " is " + users[i].age + " years old!");
}
}
getUsers(users);
答案 1 :(得分:2)
您的for循环超出了可用的数组项。最高的ID为users.length - 1
。
所以最简单的方法是删除等号。
还要考虑在forEach
或map
函数中使用buildt:
function getUsers( users ) {
users.forEach( u => {
console.log( `${ u.firstName } is ${ u.age } years old!` );
} );
}
答案 2 :(得分:1)
它应小于长度不小于等于
for (var i = 0; i < users.length; i++) {
console.log(users[i].firstName + " is " + users[i].age + " years old!");
}
答案 3 :(得分:0)
您可以使用for-of循环
let users = [
{
firstName: "John",
lastName: "Doe",
age: 34
},
{
firstName: "Jack",
lastName: "Jackson",
age: 23
},
{
firstName: "Ann",
lastName: "Watson",
age: 24
}
];
function getUsers(users) {
for (var user of users) {
console.log(user.firstName + " is " + user.age + " years old!");
}
}
getUsers(users);