2014-02-08 69 views
0

我也碰到过这样的:为什么返回Object.keys()一个对象(看起来像数组)?

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,下面的步骤采取:

... 6.返回数组

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

在测试了Chrome和Firefox在Windows 7

这是怎么回事?应该是数组,看起来像数组给我,对象?

编辑:
typeof()。 Arrgh。

回答

1

数组是对象。

尝试在您的控制台中输入typeof([1,2,3]) - 您还会得到object的结果。现在

,如果键入Object.prototype.toString.call([1,2,3]),你会得到[object Array],这是有点用的(你会得到的Object.keys的返回值相同的结果)。

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

+0

是的,这是有用的。只想将输出作为数组并首次运行。 ;) – loveNoHate

1

你为什么说这是一个对象?在数组上运行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

哎呀,一样容易呢?一切都是Javascript中的对象,对吧,嗯?好的:http://ecma-international.org/ecma-262/5.1/#sec-11.4.3。 Arrgh。 ;)认为这个问题应该运行:'typeof()'如何工作?我可以删除吗? ;) – loveNoHate

+0

@dollarvar检查我做的最后一分钟的编辑。是的,这很基本。 –

相关问题