2014-02-08 114 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檢查我做的最後一分鐘的編輯。是的,這很基本。 –

相關問題