如果有的话,使用对象作为数组索引的缺点是什么?

What, if any, are the disadvantages to using an object as an array index?

本文关键字:数组 索引 是什么 缺点 对象 如果      更新时间:2023-09-26

我没有读到这是可能的,但凭直觉,我测试了是否可以将对象用作关联数组中的索引。这样的:

var obj = Object(),
arr = Array();
arr[ obj ] = "things";
console.log( arr[obj] );

将"事物"记录到控制台。这对我来说似乎是一个惊人的灵活性,我想用它来保存有关节点的信息。

然而,它感觉有点"off",好像它太灵活了。在使用这个工具时,是否存在我应该注意的效率低下或注意事项?

当对象被用作属性名时,它将被字符串化——所有对象属性都是字符串!这意味着它也失去了它的身份,不再是唯一的标识符。

var obj = {};
var key = {};
obj[key] = "things"; // create a property with the name String(key)
obj["[object Object]"] // "things"

它不是你想的那样:

> obj.toString()
"[object Object]"
> arr["[object Object]"]
"things"

以这种方式添加的任何内容都将固定为相同的硬编码密钥名称。

你可以用ES6的Map做你想做的事情。它不是无处不在,但有多边形。