有没有办法使用数字types作为对象的关键?

看来,当我使用一个数字types作为一个对象的关键名称,它总是被转换成一个string。 无论如何,它实际上得到它存储为数字? 正常的types转换似乎不起作用。

例:

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

Dir输出:

 { '1': 'a value' } 

想要的是这样的:

 { 1: 'a value' } 

build议吗?

谢谢

不,这是不可能的。 密钥将始终转换为string。 请参阅Property Accessor文档

属性名称必须是string。 这意味着非string对象不能用作对象中的键。 任何非string对象,包括一个数字,都通过toString方法types化为一个string。

 > var foo = {} undefined > foo[23213] = 'swag' 'swag' > foo { '23213': 'swag' } > typeof(Object.keys(foo)[0]) 'string' 

在ECMA-262-5中似乎是devise的:

属性标识符types用于将属性名称与属性描述符相关联。 属性标识符types的值是表单(名称,描述符)的对,其中名称是string,描述符是属性描述符值。

但是,在ECMA-262-3中我没有看到明确的规格。 无论如何,我不会尝试使用非string作为属性名称。

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

在JavaScript中,数字string和数字是可以互换的,所以

 myObject[1] == myObject['1'] 

如果你真的希望数字是一个对象的关键,你可能需要一个数组(即用new Array()[] )创build。