簡體   English   中英

現代瀏覽器如何實現 JS Array,特別是添加元素?

[英]How do modern browsers implement JS Array, specifically adding elements?

我的意思是當在數組 object 和 JavaScript 上調用.push()時,會增加底層“數組”的容量(以元素數量計)。 此外,如果有一個很好的資源可以為 JS 找到此類信息,那么將其包含在內會很有幫助。

編輯

看起來 JS 數組就像一個具有特殊屬性的 object 文字。 但是,我對較低級別的細節感興趣——瀏覽器如何在它們各自的 JS 引擎中實現這一點。

這個問題不可能有任何單一的正確答案。 數組的擴展機制是一個內部實現細節,可以從一個 JS 實現到另一個不同。 事實上,Tamarin 引擎有兩種不同的實現,用於 arrays 內部,具體取決於它確定數組是順序的還是稀疏的。

這個答案是錯誤的。 請參閱@Samuel Neff 的回答和以下資源:

http://news.qooxdoo.org/javascript-array-performance-oddities-characteristics

http://jsperf.com/array-popuplation-direction

JavaScript 中的 Arrays 沒有容量,因為它們不是真正的 arrays。 它們實際上只是 object 散列,具有length屬性和"0""1""2"等屬性。當您對數組執行.push()時,它實際上會:

 ary[ ary.length++ ] = the_new_element; // set via hash

Javascript 確實包含一種聲明數組長度的機制,例如:

var foo = new Array(3);
alert(foo.length); // alerts 3

但由於 arrays 在 javascript 中是動態的,因此沒有理由這樣做,您不必手動分配 arrays。 上面的例子沒有創建一個固定長度的數組,只是用 3 個未定義的元素初始化它。

// 編輯:我要么誤讀了你的問題,要么你改變了它,對不起,我認為這不是你要問的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM