在javascript对象中使用浮点数作为键是否可以?这些物体不存在潜在的问题吗?
考虑以下代码:
var obj = {};
obj[1.2345] = 10;
obj[10000] = 10;
obj[10000.23] = 10;
答案 0 :(得分:7)
在javascript对象中使用浮点数作为键是否可以?
是的,主要是。所有属性名称(键)都是字符串*(即使是我们认为是数组索引的那些,在JavaScript的标准数组中,因为those aren't really arrays)。所以当你写
obj[1.2345] = 10;
你真正写的是:
obj[String(1.2345)] = 10;
e.g。
obj["1.2345"] = 10;
并且在对象中拥有名称为1.2345
(作为字符串)的属性非常好。
我说的原因"主要是"以上是JavaScript(和大多数其他语言)使用的浮点数不是非常精确;所以如果你这样做了:
obj[0.3] = 10;
然后
var key = 0.1;
key += 0.2;
console.log(obj[key]); // undefined
这是未定义的,因为0.1 + 0.2
来自0.30000000000000004
,而不是0.3
,并且您的对象没有名为0.30000000000000004
的属性。
* " ...所有属性名称......都是字符串..." 这是通过ES5实现的,但是从ES2015(又名ES6)开始, #39;新的属性名称类型:Symbol
。但是大多数属性都有字符串名称,Symbol
的用例非常重要但超过" normal"财产名称。