2017-08-06 38 views
0

在打字稿代碼中,我有一個包含對象的數組。當我調用「getUsers(users)」函數時,它會根據需要返回結果,但在控制檯中出現此錯誤 「Uncaught TypeError:無法在getUsers(index.js:20)處讀取undefined 的屬性'firstName' 在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); 

回答

2

的問題是與i <= users.length,它必須i < users.lengthi++將遞增1,i的值,但是長度爲3,索引從0這樣的元素都被佔用,直到第二索引開始,因此i <= users.length實際上將嘗試訪問元件,其中是unefined第三索引

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);

2

您的for循環超出了可用的數組項目。最高的ID是users.length - 1

所以最簡單的方法是刪除等號。

還想到用buildt在forEachmap功能像這樣的:

function getUsers(users) { 
    users.forEach(u => { 
    console.log(`${ u.firstName } is ${ u.age } years old!`); 
    }); 
} 
1

應該小於長度不小於等於少

for (var i = 0; i < users.length; i++) { 
    console.log(users[i].firstName + " is " + users[i].age + " years old!"); 
} 
0

可以使用循環換的

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); 
相關問題