javascript - 在 Javascript 数组上存储属性有什么缺点吗?

标签 javascript

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

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

a.length // returns 3

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

这是我的问题:

有人知道在 Javascript 数组上存储属性有什么问题吗?它适用于所有浏览器吗?是否有任何证据表明这会随着 Javascript 的 future 版本而改变?对于这是否是一个好的做法有什么普遍的看法吗?

(另外,郑重声明,我不需要使用 for...in 循环迭代数组。我知道这样的循环也会包含属性)

最佳答案

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

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

再说一次,不,没有其他警告,你可以不用这样做。

关于javascript - 在 Javascript 数组上存储属性有什么缺点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8632909/

相关文章:

javascript - 使用 angularjs 验证经度和纬度的正则表达式

javascript - 用纯 JS 动画最大高度?

javascript - 在初始化时引用自己的属性

javascript - 是否可以检测到在 designMode 中当前光标位置切换的内容?

javascript - 统计指定列表中关键字出现的频率

javascript - Node.js Babel 构建和 npm 模块别名

javascript - 如何将 "reference"值插入到 firestore 中?

javascript - Firefox addon sdk 浏览器控制台便利性问题

javascript - 使用 Javascript 的实时日历(不是任何其他语言)

javascript - 为什么循环数组时 for..in 比 for 循环更快