我遇到过这个:
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.返回数组。
在Windows 7上的Chrome和Firefox上测试。
发生了什么事?应该是数组,看起来像我的数组,是对象?
修改
typeof()。 Arrgh。
答案 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)