一、第一次使用Array
是错的。虽然它是possible去做,并不意味着你应该这样做。您正在“滥用”数组也是对象的事实。这可能会导致意外的行为,例如尽管您添加了 200 个值,myVars.length
将0
.
不要使用 JavaScript 数组作为关联数组。为此使用普通对象:
var myVars = {};
myVars['test1'] = a;
myVars['test2'] = b;
myVars['test3'] = c;
其次,在 JavaScript 中,两者(对象和数组)之间没有真正的区别。数组扩展了对象并添加了一些行为,但它们仍然是对象。元素存储为数组的属性。
您可以在以下位置找到更多信息规格 http://ecma262-5.com/ELS5_HTML.htm#Section_15.4:
Array objects give special treatment to a certain class of property names. A property name P (in the form of a String value) is an array index if and only if ToString(ToUint32(P)) is equal to P and ToUint32(P) is not equal to 232−1. (...)
So both:
var obj = {'answer': 42};
obj['answer'];
and
var arr = [42];
arr[0];
have the same access time†, which is definitely not O(n)
.
†: 更好的说法是should有。显然,这在不同的实现中有所不同。
除此之外,你的第二个例子很难维护。如果将数字分配给变量,为什么不直接使用数字呢?
var myVars = [];
myVars[0] = a;
myVars[1] = b;
myVars[2] = c;
Update:
更重要的是:您必须根据您的需求选择正确的数据结构,这不仅取决于单个元素的访问时间,还取决于:
- 键是连续数字还是任意字符串/数字?
- 您是否必须访问集合的所有(即循环所有)元素?
数值数组(数组)和关联数组(或哈希表/映射(JS 中的对象))针对不同的问题提供了不同的解决方案。