簡體   English   中英

為什么對象方法不返回值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM