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

2022-08-30 04:11:13

似乎当我在对象中使用数字类型作为键名时,它总是被转换为字符串。有没有真正让它存储为数字?正常的类型转换似乎不起作用。

例:

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

目录输出:

{
    '1': 'a value'
}

我想要的是这个:

{
    1: 'a value'
}

建议?


答案 1

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

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

> var foo = {}
undefined

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

> foo
{ '23213': 'swag' }

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

答案 2

在一个对象中,没有,但我发现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)();
  }
}