在Javascript数组中存储属性有什么缺点吗?

Are there any downsides to storing properties on Javascript arrays?

本文关键字:什么 缺点 属性 Javascript 数组 存储      更新时间:2023-09-26

我知道Javascript数组实际上是对象,因为它们是对象,它们可以有属性。下面是一个例子:

var a = [1, 2, 3];
a.currentIndex = 2;
a.next = function() { ... };
a.prev = function() { ... };
a.length // returns 3

对我来说,这似乎会派上用场。我看到了许多原因,为什么您可能希望将状态或实用程序函数存储在实际数组本身,而不是存储在其他变量上。这甚至比将数组作为对象的属性,并将其他内容存储在该对象中要好。

我的问题是:

有人知道在Javascript数组上存储属性的任何问题吗?它能在所有浏览器中工作吗?有没有证据表明这将在未来的Javascript版本中改变?关于这是否是一种好的做法,有没有什么普遍的看法?

(注。对于记录,我不需要用For来迭代数组…在循环。我知道这样的循环也会包括属性)

既然你已经排除了for in的问题,我在这里的回答是明确的"不"-没有问题需要担心。所有Array.prototype方法将只适用于"索引"键(0…n)。

这里最好的例子是众所周知的jQuery库,它也使用类数组对象来存储DOM节点,但它也有很多方法附加到该对象(jQuery使用原型)。然而,其他库,如Zepto,只是把这些方法直接放在"array"对象本身。

再说一遍,没有其他的警告了你就省省了

只是抛出一件事-没有"复制"数组原型函数将复制任何额外的属性,如果这是重要的,即.splice, .slice, concat将给你新的"干净"数组没有currentIndex

是的,它适用于所有浏览器。它是有效的javascript(数组是对象)。可以想到使用Array构造函数而不是对象的许多原因,但如果这是您喜欢的编码风格,那么就使用它吧。