[英]Why does a object method not return a value?
在以下代碼中,函數findById()
實際上未返回任何內容。 console.log()
按預期方式觸發並打印,但結果是調用該函數的變量未定義。
我試圖更改返回值類型,甚至只是簡單地將return true;
最后沒有條件,但始終是未定義的。 為了確保我沒有錯過簡單的事情,我實際上創建了一個僅返回值istrue()
的函數。 這實際上很好。
這是對象/方法的定義
const database = {
// List of authenticated characters
characters: [],
addCharacter: function(c) {
this.characters.push(c);
},
findById: function(id) {
console.log('Searching for character...');
this.characters.forEach((c) => {
if (c.id === id) {
console.log('Found');
console.log('cid: ' + c.id);
console.log('id: ' + id);
return true; // Never actually returns
}
});
},
istrue: function() {
return true;
}
};
以及它在哪里被調用
const find = database.findById(characterIdToFind);
console.log(typeof find); // always undefined
console.log(find); // always undefined
我希望在我嘗試過的此函數的至少一個排列中會有某種返回值。 函數的返回值永遠不會有任何變化,只是undefined
。
嵌套函數內部的return
語句從函數返回。
在這種情況下,可以使用some()
代替forEach()
因為您不能破壞forEach
。
findById: function(id) {
console.log('Searching for character...');
return this.characters.some(c => c.id === id)
}
如果要獲取與給定條件匹配的對象,請使用find()
findById: function(id) {
console.log('Searching for character...');
return this.characters.find(c => c.id === id)
}
如果您在上面的兩種方法中都看到過,則在每次迭代中我們都會隱式返回c.id === id
,但它不會從外部函數return
。
這是因為您嘗試從forEach
返回並且forEach
不返回任何內容
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.