有没有办法使用数字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。