javascript - 可以使用 float 作为对象中的键吗?

标签 javascript arrays

可以在 javascript 对象中使用 float 作为键吗?这样的对象不会有潜在的问题吗?

考虑下面的代码:

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

最佳答案

Is it ok to use float numbers as keys in javascript objects?

是的,主要是。所有属性名称(键)都是字符串*(即使是我们认为是数组索引的那些,在 JavaScript 的标准数组中,因为 those aren't really arrays )。所以当你写

obj[1.2345] = 10;

你真正写的是:

obj[String(1.2345)] = 10;

例如

obj["1.2345"] = 10;

并且在对象中拥有名称为 1.2345(作为字符串)的属性是完全没问题的。

我在上面说“大部分”的原因是 JavaScript(以及大多数其他语言)使用的 float 并不十分精确;所以如果你这样做:

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)开始,有一个新的属性名称类型: Symbol .但是大多数属性都有字符串名称,Symbol 的用例很重要,但数量不及“普通”属性名称。

关于javascript - 可以使用 float 作为对象中的键吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22373549/

相关文章:

javascript - 创建持续时间输入(mm :ss:ms) in an AngularJS directive

javascript - 使用 Javascript 获取 PHP 数据并将其分配给数组

javascript:基于对象数组创建数组

java - (line != null) 在 Java BufferedReader 中不起作用

javascript - 通过javascript使photoshop运行系统命令

javascript - 从连接中排除文件(MINIT 插件)

ios - Objective-C : NSNumber from Array to float

arrays - 合并两个不相等的数组进行散列

c++ - 在 C++ std::vector 和 C 数组之间转换而不复制

javascript - 使用 Jquery 选中和取消选中复选框