在Javascript数组上存储属性有任何缺点吗?

时间:2011-12-26 04:31:23

标签: javascript

我知道Javascript Arrays实际上是对象,因为它们是对象,所以它们可以具有属性。这是一个例子:

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

a.length // returns 3

对我而言,这似乎非常方便。我看到为什么你可能想要在实际数组本身而不是在其他变量上存储状态或实用程序函数的众多原因。它甚至比将数组作为对象的属性更好,其他东西存储在该对象上。

这是我的问题:

有没有人知道在Javascript数组上存储属性的任何问题?它适用于所有浏览器吗?有没有证据表明这会随着Javascript的未来版本而改变?关于它是否是一种好的做法,是否有任何普遍的智慧?

(p.s。对于记录,我不需要使用for ... in循环迭代数组。我知道这样的循环也会包含属性)

3 个答案:

答案 0 :(得分:2)

由于你已经排除了for in问题,我的答案显然是“不” - 没有问题需要担心。所有Array.prototype方法仅适用于“索引”键(0 ... n)。

这里最好的例子是众所周知的jQuery库,它也使用Array-Like对象来存储DOM节点,但它也有许多附加到该对象的方法(jQuery在那里使用原型)。但是,像Zepto这样的其他库,只是将这些方法直接放在“数组”对象本身上。

所以再说一次,没有其他的警告,你就是保存它。

答案 1 :(得分:1)

再抛出一件事 - 如果重要的话,“复制”数组原型函数都不会复制任何额外的属性,即.splice.sliceconcat将为您提供没有currentIndex等的新“干净”数组

答案 2 :(得分:0)

是的,它适用于所有浏览器。它是有效的javascript(数组是对象)。人们可以想到为什么要使用Array构造函数而不是对象的一些原因,但如果这是您首选的编码风格,请使用它。