可以使用浮点数作为对象中的键吗?

时间:2014-03-13 08:57:41

标签: javascript arrays

在javascript对象中使用浮点数作为键是否可以?这些物体不存在潜在的问题吗?

考虑以下代码:

var obj = {};
obj[1.2345]   = 10;
obj[10000]    = 10;
obj[10000.23] = 10;

1 个答案:

答案 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"财产名称。