Array.prototype.splice()
使用 Array.prototype.splice()
方法通過刪除或替換現(xiàn)有元素來修改原數(shù)組的內(nèi)容浮创。
let course = ['HTML', 'CSS', 'JavaScript']
course.splice(0)
console.log(course.length) // 0
注意:此方法會(huì)影響其他引用亡呵。
let course = ['HTML', 'CSS', 'JavaScript']
let other = course
course.splice(0)
course // []
other // []
由于 splice()
返回一個(gè)已刪除項(xiàng)目的數(shù)組,您可以通過將結(jié)果分配給一個(gè)新變量來獲取原始數(shù)組的副本:
let foo = ['hello', 'world']
// 清空并創(chuàng)建一個(gè) foo 的副本
let bar = foo.splice(0, foo.length)
console.log(foo) // []
console.log(bar) // ['hello', 'world']
將 length 設(shè)置為 0
將數(shù)組的長(zhǎng)度設(shè)置為零。
let course = ['HTML', 'CSS', 'JavaScript']
course.length = 0
console.log(course) // []
分配新的空數(shù)組
將新的空數(shù)組分配給現(xiàn)有數(shù)組也會(huì)使數(shù)組為空。
let course = ['HTML', 'CSS', 'JavaScript']
course = []
console.log(course.length) // 0
pop/shift
循環(huán)判斷數(shù)組的 length
屬性盯仪,在每次循環(huán)都移除一個(gè)元素。
let course = ['HTML', 'CSS', 'JavaScript']
while(course.length > 0) {
course.pop()
// course.shift()
}
console.log(course) // 0
length = 0和 Array = [] 之間的差異蜜葱?
在大多數(shù)情況下全景,將變量重新分配給空數(shù)組是更好的選擇。它比調(diào)整 length
屬性更短牵囤、更明確爸黄。
但有時(shí),你有一個(gè)數(shù)組是通過引用分配的揭鳞,你想讓它們保持引用炕贵。
假如我們有一個(gè) foo
數(shù)組,我們還有一個(gè) bar
變量野崇,我將它的值設(shè)置為 foo
數(shù)組称开。
let foo = ['hello', 'world']
// 添加引用
let bar = foo
如果我重新分配 foo
的值為 []
空數(shù)組,bar
變量仍指向分配給它的原始數(shù)組乓梨。
foo = []
// bar 不受影響
console.log(bar) // ['hello', 'world']
foo = []
將一個(gè)新的數(shù)組的引用賦值給變量钥弯,其他引用并不受影響。這意味著以前數(shù)組的內(nèi)容被引用的話將依舊存在于內(nèi)存中督禽,這將導(dǎo)致內(nèi)存泄漏。
如果我改為 foo.length = 0
总处,刪除數(shù)組里的所有內(nèi)容狈惫,也將影響到其他引用。
let foo = ['hello', 'world']
let bar = foo
foo.length = 0
// `bar` 受影響
console.log(bar) // []
如果數(shù)組被聲明為常量,則不能將其重新分配給 []
胧谈。這時(shí)我們應(yīng)該使用 lenght = 0
忆肾。
const course = ['HTML', 'CSS', 'JavaScript']
course = [] // 會(huì)拋出異常:"Assignment to constant variable"
// 使用 length = 0
course.length = 0
更多資料
你可以在 How do I empty an array in JavaScript? 和 Difference between Array.length = 0 and Array =[]? 查看更多詳細(xì)的內(nèi)容,比如這些方法的性能測(cè)試菱肖,進(jìn)行討論客冈。