有没有办法使用数字类型作为对象键?

新手上路,请多包涵

似乎当我在对象中使用数字类型作为键名时,它总是会转换为字符串。无论如何实际上让它存储为数字?正常的类型转换似乎不起作用。

例子:

 var userId = 1;
console.log( typeof userId ); // number
myObject[userId] = 'a value';
console.dir(myObject);

目录输出:

 {
    '1': 'a value'
}

想要 的是这样的:

 {
    1: 'a value'
}

建议?

原文由 Spot 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

不,这是不可能的。 密钥将始终转换为字符串。 请参阅 属性访问器文档

属性名称必须是字符串。这意味着非字符串对象不能用作对象中的键。任何非字符串对象,包括数字,都通过 toString 方法类型转换为字符串。

 > var foo = {}
undefined

> foo[23213] = 'swag'
'swag'

> foo
{ '23213': 'swag' }

> typeof(Object.keys(foo)[0])
'string'

原文由 Matthew Flaschen 发布,翻译遵循 CC BY-SA 3.0 许可协议

在一个对象中,不,但我发现 Map 对于这个应用程序非常有用。这是我将它用于数字键的地方,一个基于键的事件。

 onKeydown(e) {
  const { toggleSidebar, next, previous } = this.props;

  const keyMapping = new Map([
    [ 83, toggleSidebar ],  // user presses the s button
    [ 37, next          ],  // user presses the right arrow
    [ 39, previous      ]   // user presses the left arrow
  ]);

  if (keyMapping.has(e.which)) {
    e.preventDefault();
    keyMapping.get(e.which)();
  }
}

原文由 corvid 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题