有没有办法使用数字类型作为对象键?
似乎当我使用数字类型作为对象中的键名称时,它总是会转换为字符串。有没有办法真正将其存储为数字?正常的类型转换似乎不起作用。
示例:
var userId = 1;
console.log( typeof userId ); // number
myObject[userId] = 'a value';
console.dir(myObject);
Dir 输出:
{
'1': 'a value'
}
我想要是这样的:
{
1: 'a value'
}
建议?
It seems that when I use a numeric type as a key name in an object, it always gets converted to a string. Is there anyway to actually get it to store as a numeric? The normal typecasting does not seem to work.
Example:
var userId = 1;
console.log( typeof userId ); // number
myObject[userId] = 'a value';
console.dir(myObject);
Dir Output:
{
'1': 'a value'
}
What I want is this:
{
1: 'a value'
}
Advice?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(12)
不,这是不可能的。 密钥将始终转换为字符串。请参阅属性访问器文档
No, this is not possible. The key will always be converted to a string. See Property Accessor docs
在一个对象中,没有,但我找到了 Map 对于此应用程序非常有用。这是我将其用于数字键(基于键的事件)的地方。
In an object, no, but I have found Map extremely useful for this application. Here is where I have used it for numeric keys, a key-based event.
似乎是 ECMA-262-5 中设计的:
但是,我在 ECMA-262-3 中没有看到明确的规范。
无论如何,我不会尝试使用非字符串作为属性名称。
Appears to be by design in ECMA-262-5:
However, I don't see a definite specification for it in ECMA-262-3.
Regardless, I wouldn't attempt to use non-strings as property names.
这是解决方案。如果这不起作用,请告诉我环境设置
Here is the solution. Please tell me the environmental setups if this is not working
如果您想要不同的数据类型作为键,您可以使用
Map
you can use,
Map
if you want different datatype as keys我们需要这样的东西吗?
安慰:
对象
1
:
“一个值”
Do we need something like this?
Console:
Object
1
:
"a value"
你不能,但你总是可以将键转换为数字
You can't, but you can always convert keys to a numbers
根据 ECMA-262 第 13 版(截至 2024 年): 属性键值可以是 ECMAScript
String
值或Symbol
值'。所以答案仍然是否定的,至少不是天生的。
但是,从技术上讲,可以破解它并将 32 位整数转换为 4 字符序列(字符串)并将它们用作键(请注意,这些字符串可能不是长为 4 字节)。
此方法对于大数据对象传输期间的压缩可能很有用。
例子:
According to ECMA-262 Edition 13 (as of 2024): A property key value is either an ECMAScript
String
value or aSymbol
value'.So the answer is still NO, at least not natively.
However, it is technically possible to hack it and convert 32-bit integers into 4-char sequences (strings) and use them as keys (note that those strings might not be 4-byte long).
This approach might be useful for compression during transmission of large data objects.
Example:
根据 Mozilla:
传播语法
只需提前订购商品,您就应该得到您想要的结果。
所以对于你的情况:
Per Mozilla:
Spread syntax
Just order the items before hand and you should get the result you want.
So for your case:
你可以试试这个:
You can try this:
在 JavaScript 中,数字字符串和数字是可以互换的,因此
如果您确实希望数字成为对象的键,您可能需要一个数组(即使用
new Array()
或[] 创建) )。
In JavaScript, numerical strings and numbers are interchangeable, so
If you really want number to be the key for an object, you might want an array (i.e. created with
new Array()
or[]
).