2017-04-23 63 views
2

編寫一個名爲「getAllKeys」的函數,該函數返回所有輸入對象的密鑰的數組。在console.log中獲取「未定義」錯誤

示例輸入:

{ 
    name : 'Sam', 
    age : 25, 
    hasPets : true 
} 

函數的返回值(輸出):

['name', 'age', 'hasPets'] 

不要使用 「Object.keys」 來解決此提示。

我的解決方案如下。

function getAllKeys(obj) { 
    var arrayToPrint = []; 
    for (var key in obj) { 
    arrayToPrint.push(key); 
    } 
    console.log(arrayToPrint); 
} 

obj1 = { 
    name : 'Sam', 
    age : 25, 
    hasPets : true 
}; 

getAllKeys(obj1); 

控制檯輸出:

enter image description here

可有人請解釋一下,爲什麼我收到此未定義?

+1

你不'return'什麼。 – zerkms

+1

如果你在控制檯中運行這段代碼,那麼最終的輸出結果是'getAllKeys(obj1);' - 這是'undefined' - 因爲你的函數沒有返回任何東西 - 順便說一句,這是** not一個錯誤** –

+0

然而,你的'getAllKeys'函數,而不是記錄到控制檯**應該**返回數組,所以這個函數是有用的 –

回答

1

這是因爲函數沒有返回任何東西。如果函數顯式不返回值,則函數將返回undefined。

可以返回從功能arrayToPrint和日誌getAllKeys(obj1)

function getAllKeys(obj) { 
    var arrayToPrint = []; 
    for (var key in obj) { 
    arrayToPrint.push(key); 
    } 
    return arrayToPrint; // changed here 
} 

obj1 = { 
    name : 'Sam', 
    age : 25, 
    hasPets : true 
}; 

console.log(getAllKeys(obj1)); // changed here 

DEMO

+1

這是對的,但他們的困惑是由他們不記錄函數的輸出。它的控制檯自己做​​。他們現有的函數不符合返回數組的要求,但它仍然可以工作,並且控制檯的未定義可以被忽略。 –

+0

這段代碼如果在控制檯中運行(這是OP使用它們的代碼做的)將會產生完全相同的輸出控制檯!實際上,如果你把OP代碼放在jsfiddle中,你也不會在代碼中得到'undefined' - 所以,「undefined」並不是因爲函數不返回任何東西 - 「undefined」是因爲*這就是開發人員工具控制檯的操作方式* - 儘管這並沒有消除這個事實:*這就是getAllKeys函數應該如何寫入所有有用的* –

+0

,謝謝@brk它的工作。 –

相關問題