我的意思是当在一个Array对象上调用.push()
时,JavaScript会增加底层“数组”的容量(元素数量)。此外,如果有一个很好的资源来为JS找到这种信息,那么包含它会很有帮助。
修改
似乎JS数组就像具有特殊属性的对象文字。但是,我对更低层次的细节感兴趣 - 浏览器如何在各自的JS引擎中实现它。
答案 0 :(得分:5)
这个qurstion没有任何正确答案。数组的扩展机制是内部实现细节,可以从一个JS实现到另一个实现。事实上,Tamarin引擎有两种不同的内部用于数组的实现,具体取决于它是否确定数组是顺序的还是稀疏的。
答案 1 :(得分:1)
这个答案是对的。请参阅@Samuel Neff的回答和以下资源:
http://news.qooxdoo.org/javascript-array-performance-oddities-characteristics
http://jsperf.com/array-popuplation-direction
<击> 撞击>
<击> JavaScript中的数组没有容量,因为它们不是真正的数组。它们实际上只是具有length
属性和属性"0"
,"1"
,"2"
等的对象哈希值。当您在数组上执行.push()
时,它有效地做到了:
ary[ ary.length++ ] = the_new_element; // set via hash
击> <击> 撞击>
答案 2 :(得分:0)
Javascript确实包含一种声明数组长度的机制,如:
var foo = new Array(3);
alert(foo.length); // alerts 3
但由于数组在javascript中是动态的,因此没有理由这样做,您不必手动分配数组。上面的例子没有创建一个固定长度的数组,只是用3个未定义的元素初始化它。
//编辑:我误解了你的问题,或者你改变了它,抱歉,我不认为这就是你所要求的。