为什么Object.keys返回字符串数组而不是Numbers数组

时间:2016-05-30 14:26:11

标签: javascript

当我运行以下代码

var obj = { 0: 'a', 1: 'b', 2: 'c' };
typeof Object.keys(obj)[0] //returns string

obj对象中创建数字键。

任何原因,为什么它的字符串而不是number

5 个答案:

答案 0 :(得分:17)

键类型始终。如果您需要数字,则必须手动投射:



var obj = { 0: 'a', 1: 'b', 2: 'c' };
var ids = Object.keys(obj).map(Number);

console.log(ids);




答案 1 :(得分:10)

因为Object.keys返回带字符串的数组

  

Object.keys()返回一个数组,其元素是与直接在对象上找到的可枚举属性相对应的字符串。属性的顺序与通过手动循环对象的属性给出的顺序相同。

你得到一个字符串数组,因为根据定义Property names是字符串。

  

属性名称必须是字符串。这意味着非字符串对象不能用作对象中的键。任何非字符串对象(包括数字)都通过toString方法被拼接成字符串。

答案 2 :(得分:2)

根据文档 Object.keys() 返回字符串数组

  

Object.keys()返回一个数组,其元素为 strings ,对应于直接在对象上找到的可枚举属性。属性的顺序与通过手动循环对象的属性给出的顺序相同。( Taken from here

如果您想将其转换为数字数组,请使用 map()

var obj = {
  0: 'a',
  1: 'b',
  2: 'c'
};
console.log(typeof Object.keys(obj).map(Number)[0])

答案 3 :(得分:2)

Javascript对象没有数字键!所有键都是字符串。总是

如果您想将其他内容映射到值,请使用Map

答案 4 :(得分:0)



var obj = {
  0: 'a',
  1: 'b',
  2: 'c'
};
console.log(typeof Object.keys(obj).map(Number)[0])