Các deletenhà điều hành được sử dụng để loại bỏ các thuộc tính từ các đối tượng.
const obj = { foo: "bar" }
delete obj.foo
obj.hasOwnProperty("foo") // false
Lưu ý rằng, đối với mảng, điều này không giống như loại bỏ một phần tử . Để loại bỏ một phần tử khỏi một mảng, sử dụng Array#splicehoặc Array#pop. Ví dụ:
arr // [0, 1, 2, 3, 4]
arr.splice(3,1); // 3
arr // [0, 1, 2, 4]
Chi tiết
deletetrong JavaScript có một chức năng khác với từ khóa trong C và C ++: nó không trực tiếp giải phóng bộ nhớ. Thay vào đó, mục đích duy nhất của nó là loại bỏ các thuộc tính khỏi các đối tượng.
Đối với mảng, xóa một thuộc tính tương ứng với một chỉ mục, sẽ tạo ra một mảng thưa thớt (tức là một mảng có "lỗ" trong đó). Hầu hết các trình duyệt đại diện cho các chỉ số mảng bị thiếu này là "trống".
var array = [0, 1, 2, 3]
delete array[2] // [0, 1, empty, 3]
Lưu ý rằng deletekhông di chuyển array[3]vào array[2].
Các hàm dựng sẵn khác nhau trong JavaScript xử lý các mảng thưa thớt khác nhau.
for...in sẽ bỏ qua chỉ số trống hoàn toàn.
Một forvòng lặp truyền thống sẽ trả về undefinedgiá trị tại chỉ mục.
Bất kỳ phương pháp sử dụng Symbol.iteratorsẽ trả về undefinedgiá trị tại chỉ mục.
forEach, mapvà reduceđơn giản là sẽ bỏ qua chỉ số còn thiếu.
Vì vậy, deletetoán tử không nên được sử dụng cho trường hợp sử dụng chung để loại bỏ các phần tử khỏi một mảng. Mảng có một phương pháp chuyên dụng để loại bỏ các phần tử và phân bổ lại bộ nhớ: Array#splice()và Array#pop.
Mảng # splice (bắt đầu [, xóaCount [, item1 [, item2 [, ...]]]])
Array#splicelàm thay đổi mảng và trả về bất kỳ chỉ số bị loại bỏ nào. deleteCountcác phần tử được xóa khỏi chỉ mục startvà item1, item2... itemNđược chèn vào mảng từ chỉ mục start. Nếu deleteCountđược bỏ qua thì các phần tử từ start Index sẽ bị xóa đến cuối mảng.
let a = [0,1,2,3,4]
a.splice(2,2) // returns the removed elements [2,3]
// ...and `a` is now [0,1,4]
Ngoài ra còn có một tên tương tự, nhưng khác nhau, chức năng trên Array.prototype: Array#slice.
Mảng # lát ([bắt đầu [, kết thúc]])
Array#slicekhông phá hủy và trả về một mảng mới chứa các chỉ mục được chỉ định từ startđến end. Nếu endkhông được chỉ định, nó mặc định đến cuối mảng. Nếu endlà dương, nó chỉ định chỉ số không bao gồm dựa trên số 0 dừng lại ở. Nếu endâm, nó chỉ định chỉ mục dừng lại bằng cách đếm ngược từ cuối mảng (ví dụ: -1 sẽ bỏ qua chỉ mục cuối cùng). Nếu end <= start, kết quả là một mảng trống.
let a = [0,1,2,3,4]
let slices = [
a.slice(0,2),
a.slice(2,2),
a.slice(2,3),
a.slice(2,5) ]
// a [0,1,2,3,4]
// slices[0] [0 1]- - -
// slices[1] - - - - -
// slices[2] - -[3]- -
// slices[3] - -[2 4 5]
Mảng # pop
Array#popxóa phần tử cuối cùng khỏi một mảng và trả về phần tử đó. Thao tác này thay đổi độ dài của mảng.