2017-04-23 48 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它的工作。 –

相关问题