Spo*_*pot 70 javascript types key numeric object
似乎当我在对象中使用数字类型作为键名时,它总是被转换为字符串.反正有没有把它作为数字存储?正常的类型转换似乎不起作用.
例:
var userId = 1;
console.log( typeof userId ); // number
myObject[userId] = 'a value';
console.dir(myObject);
Run Code Online (Sandbox Code Playgroud)
目录输出:
{
'1': 'a value'
}
Run Code Online (Sandbox Code Playgroud)
我想要的是这个:
{
1: 'a value'
}
Run Code Online (Sandbox Code Playgroud)
建议吗?
谢谢
Mat*_*hen 76
不,这是不可能的. 密钥将始终转换为字符串.请参阅属性访问者文档
属性名称必须是字符串.这意味着非字符串对象不能用作对象中的键.任何非字符串对象(包括数字)都通过toString方法进行类型转换为字符串.
> var foo = {}
undefined
> foo[23213] = 'swag'
'swag'
> foo
{ '23213': 'swag' }
> typeof(Object.keys(foo)[0])
'string'
Run Code Online (Sandbox Code Playgroud)
cor*_*vid 17
在一个对象中,没有,但我发现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)();
}
}
Run Code Online (Sandbox Code Playgroud)
Rob*_*mos 10
看似ECMA-262-5的设计:
属性标识符类型用于将属性名称与属性描述符相关联.属性标识符类型的值是形式(名称,描述符)的对,其中name是String,描述符是Property Descriptor值.
但是,我没有在ECMA-262-3中看到它的明确规格.无论如何,我不会尝试使用非字符串作为属性名称.
小智 7
Map如果您想要不同的数据类型作为键,您可以使用
const map1 = new Map();
map1.set(1,3)
map1.set('1','string')
// expected output: 3
console.log(map1.get(1)) //output 3;
console.log(map1.get('1')) //output 'string';
Run Code Online (Sandbox Code Playgroud)
小智 5
这是解决方案。如果这不起作用,请告诉我环境设置
const screens = {
"768": "large",
"200": "small"
}
const keys = Object.keys(screens).map(key => parseInt(key))
// OR Number(key)
console.log(keys) // Output [200, 768]
Run Code Online (Sandbox Code Playgroud)