为什么返回Object.keys()一个对象(看起来像数组)?

时间:2014-02-08 06:17:21

标签: javascript

我遇到过这个:

var stdin = {123:1,423:1};

var stdout = Object.keys(stdin);

console.log(stdout);             //["123", "423"] 
console.log(typeof(stdout));     //object
console.log(stdout[0])           //123

ECMAScript® Language Specification说:

  

15.2.3.14 Object.keys(O)

     

当使用参数O调用keys函数时,将执行以下步骤:

     

... 6.返回数组

JSFIDDLE:http://jsfiddle.net/wpVvv/1/

在Windows 7上的Chrome和Firefox上测试。

发生了什么事?应该是数组,看起来像我的数组,对象?

修改
typeof()。 Arrgh。

2 个答案:

答案 0 :(得分:1)

你为什么说这是一个对象?在Array上运行typeof将始终返回'object'。

var arr = [1,2,3];
typeof arr --> "object"

尝试改为

Array.isArray(arr) --> true

这是你想要的测试。

var stdin = {123:1,423:1};
Array.isArray(stdin) --> false

答案 1 :(得分:1)

数组是对象。

尝试在您的控制台中输入typeof([1,2,3]) - 您也会获得object作为结果。

现在,如果您输入Object.prototype.toString.call( [1,2,3] ),您将获得[object Array],这有点有用(并且您将获得Object.keys的返回值的相同结果)。

如果你想要一个布尔结果,只需使用Array.isArray(见this related answer