数组元素的修改会影响到转换过来的结合_数组长度属性背后有什么魔力?
開發人員每天都會處理數組。作為集合,要查詢的重要屬性是項目數:Array.prototype.length。
在JavaScript中,length它并不總是指示現有元素的數量(對于稀疏數組),并且修改此屬性可能會刪除元素。
讓我們揭開這個屬性背后的神秘面紗。
對于特定的數組類型,此屬性的行為有所不同。讓我們枚舉它們:當數組的元素具有以開頭的連續索引時,數組是密集的0。例如[1, 3, 4]是致密的,因為索引是連續的:0,1和2。當數組的元素沒有以開頭的連續索引時,它是稀疏的0。例如[1, , 4, 6]是稀疏的,因為元件的索引是不連續的:0,2和3。
長度作為數組中元素的數量
的常見用法length是確定元素的數量。這對于密集集合類型是正確的:
參見JS Bin中的示例
密集數組沒有空,并且項目數對應于highestIndex + 1。在[3, 5, 7, 8]最高的索引是3元素的8,因此該數組的大小3 + 1 = 4。
長度大于最大索引的數字
在稀疏數組中,該length值大于最高索引,但是它并不表示元素的實際數量。查詢時length,它大于元素數。由于陣列中的間隙而發生。
添加或刪除元素時,length僅基于最高索引進行突變。任何不影響最高索引的數組修改都不會修改length,例如使用時delete。
參見JS Bin中的示例
長度修改
在前面的說明中,length只讀。但是JavaScript也允許修改此屬性。長度修改會影響數組,具體取決于新值和現有的最高索引。它可以刪除元素或使數組稀疏。
當新length數字小于或等于最高索引時,將刪除索引大于或等于新大小的所有元素。從數組末尾刪除元素的有用方案。
如果使用大于最高索引的數字(或使用大于current的數字length),則數組將變得稀疏。它很少有用。
請參閱JS Bin中的示例
可以為分配一個不同于數字的類型length。JavaScript會將原語轉換為數字。如果轉換結果NaN小于或小于0,則引發錯誤Uncaught RangeError: Invalid array length。
安全編碼
通過創建稀疏數組來修改數組length,使用刪除元素delete,使用添加元素[newIndex]是潛在問題的根源。結果是不一致的length值。JavaScript提供了更安全的選擇。
要將元素添加到數組的末尾,請使用Array.prototype.push()并刪除最新的pop()。要將元素插入開頭,請使用unshift()并刪除第一個shift()。對于更復雜的插入,刪除或替換,splice()也足夠強大。
請參閱JS Bin中的示例
在極少數情況下,數組可以是稀疏的。依靠length確定元素的數量是不安全的。只需使用一個輔助函數來處理缺少的元素:
in運算符確定對象是否具有屬性。它可以完美地檢查元素是否存在于特定索引處。
結論
如本文所見,length是具有復雜行為的屬性。
通常,它的工作不會令人驚訝,但是在處理稀疏數組和修改時最好采取預防措施length。
另一種選擇是完全避免修改此屬性并使用該splice()方法。
另請參見
Array.prototype.length
稀疏數組與密集數組
原著作者:德米特里·帕夫魯汀
文章來源:國外
原著鏈接:
Dmitri Pavlutin Blog?dmitripavlutin.comPS:原著文章內容為英文版本,建議使用360極速瀏覽器進行翻譯閱讀。
總結
以上是生活随笔為你收集整理的数组元素的修改会影响到转换过来的结合_数组长度属性背后有什么魔力?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python123文件和数据格式化测试7
- 下一篇: python集合类型的操作符_Pytho