Bạn có thể sử dụng lại
delete identifier;
delete object.#privateProperty;
1 DailyIframe hoặc gọi đối tượng nhiều lần [một chuỗi các cuộc gọi phương thức delete identifier;
delete object.#privateProperty;
2, delete identifier;
delete object.#privateProperty;
3, delete identifier;
delete object.#privateProperty;
2, v.v. sẽ hoạt động tốt]Nhưng khi bạn kết thúc với đối tượng gọi
delete identifier;
delete object.#privateProperty;
1, bạn nên gọi delete identifier;
delete object.#privateProperty;
6 để giải phóng tất cả các tài nguyên liên quan đến nóĐiều này đặc biệt quan trọng nếu bạn định tạo một đối tượng
delete identifier;
delete object.#privateProperty;
1 khác trong tương lai. Nếu bạn không gọi delete identifier;
delete object.#privateProperty;
6 và sau đó tạo một đối tượng gọi delete identifier;
delete object.#privateProperty;
1 mới, trình xử lý sự kiện từ đối tượng cũ và đối tượng mới sẽ can thiệp lẫn nhauNếu bạn đang sử dụng Bản dựng sẵn hàng ngày, thì
delete identifier;
delete object.#privateProperty;
6 cũng hữu ích để gọi sau khi người tham gia rời đi. Phương thức này sẽ xóa tất cả tài nguyên, bao gồm bất kỳ khung còn lại nào mà lệnh gọi có thể để lại trên trang [nếu bạn không tạo kiểu cho vùng chứa chính] Toán tử
delete identifier;
delete object.#privateProperty;
1 loại bỏ một thuộc tính khỏi một đối tượng. Nếu giá trị của thuộc tính là một đối tượng và không còn tham chiếu đến đối tượng, thì đối tượng được giữ bởi thuộc tính đó cuối cùng sẽ tự động được giải phóngThử nó
cú pháp
delete object.property
delete object[property]
Ghi chú. Cú pháp cho phép phạm vi biểu thức rộng hơn sau toán tử
delete identifier;
delete object.#privateProperty;
1, nhưng chỉ các dạng trên mới dẫn đến các hành vi có ý nghĩaThông số
delete identifier;
delete object.#privateProperty;
3Tên của một đối tượng hoặc một biểu thức đánh giá một đối tượng
delete identifier;
delete object.#privateProperty;
4Thuộc tính cần xóa
Giá trị trả về
delete identifier;
delete object.#privateProperty;
5 cho tất cả các trường hợp ngoại trừ khi thuộc tính là thuộc tính riêng không thể định cấu hình, trong trường hợp đó, delete identifier;
delete object.#privateProperty;
6 được trả về ở chế độ không nghiêm ngặtngoại lệ
delete identifier;
delete object.#privateProperty;
7Bị ném vào chế độ nghiêm ngặt nếu thuộc tính là thuộc tính không thể định cấu hình của riêng
delete identifier;
delete object.#privateProperty;
8Bị ném nếu
delete identifier;
delete object.#privateProperty;
3 là delete object.property
delete object[property]
00Sự miêu tả
Toán tử
delete identifier;
delete object.#privateProperty;
1 có cùng mức độ ưu tiên với các toán tử một ngôi khác như delete object.property
delete object[property]
02. Do đó, nó chấp nhận bất kỳ biểu thức nào được hình thành bởi các toán tử có mức độ ưu tiên cao hơn. Tuy nhiên, các hình thức sau dẫn đến lỗi cú pháp sớm trong chế độ nghiêm ngặtdelete identifier;
delete object.#privateProperty;
Vì các lớp tự động ở chế độ nghiêm ngặt và các thuộc tính riêng tư chỉ có thể được tham chiếu hợp pháp trong nội dung lớp, điều này có nghĩa là các thuộc tính riêng tư không bao giờ có thể bị xóa. Mặc dù
delete object.property
delete object[property]
03 có thể hoạt động nếu delete object.property
delete object[property]
04 đề cập đến một thuộc tính có thể định cấu hình của đối tượng toàn cầu, nhưng bạn nên tránh biểu mẫu này và thay vào đó hãy đặt tiền tố cho nó bằng delete object.property
delete object[property]
05Mặc dù các biểu thức khác được chấp nhận nhưng chúng không dẫn đến các hành vi có ý nghĩa
delete object.property
delete object[property]
0Toán tử
delete identifier;
delete object.#privateProperty;
1 xóa thuộc tính đã cho khỏi đối tượng. Khi xóa thành công, nó sẽ trả về delete identifier;
delete object.#privateProperty;
5, ngược lại sẽ trả về delete identifier;
delete object.#privateProperty;
6. Không giống như những gì mà niềm tin phổ biến gợi ý [có lẽ do các ngôn ngữ lập trình khác như xóa trong C++], toán tử delete identifier;
delete object.#privateProperty;
1 không liên quan gì đến việc giải phóng bộ nhớ trực tiếp. Quản lý bộ nhớ được thực hiện gián tiếp thông qua phá vỡ các tham chiếu. Xem trang quản lý bộ nhớ để biết thêm chi tiếtĐiều quan trọng là phải xem xét các tình huống sau
- Nếu thuộc tính mà bạn đang cố xóa không tồn tại, thì
1 sẽ không có bất kỳ hiệu lực nào và sẽ trả vềdelete identifier; delete object.#privateProperty;
5delete identifier; delete object.#privateProperty;
1 chỉ có ảnh hưởng đến tài sản riêng. Nếu một thuộc tính có cùng tên tồn tại trên chuỗi nguyên mẫu của đối tượng, thì sau khi xóa, đối tượng sẽ sử dụng thuộc tính từ chuỗi nguyên mẫudelete identifier; delete object.#privateProperty;
- Không thể xóa các thuộc tính không thể định cấu hình. Điều này bao gồm các thuộc tính của các đối tượng tích hợp như
53,delete identifier; delete object.#privateProperty;
54,delete identifier; delete object.#privateProperty;
55 và các thuộc tính được tạo dưới dạng không thể định cấu hình bằng các phương thức nhưdelete identifier; delete object.#privateProperty;
56delete identifier; delete object.#privateProperty;
- Xóa các biến, bao gồm các tham số chức năng, không bao giờ hoạt động.
57 sẽ ném mộtdelete identifier; delete object.#privateProperty;
58 ở chế độ nghiêm ngặt và sẽ không có tác dụng ở chế độ không nghiêm ngặtdelete identifier; delete object.#privateProperty;
- Không thể xóa bất kỳ biến nào được khai báo bằng
59 khỏi phạm vi toàn cầu hoặc khỏi phạm vi của hàm, bởi vì mặc dù chúng có thể được gắn vào đối tượng toàn cầu nhưng chúng không thể định cấu hình đượcdelete identifier; delete object.#privateProperty;
- Không thể xóa bất kỳ biến nào được khai báo bằng
20 hoặcdelete identifier; delete object.#privateProperty;
21 khỏi phạm vi mà chúng được xác định, bởi vì chúng không được gắn vào một đối tượngdelete identifier; delete object.#privateProperty;
- Không thể xóa bất kỳ biến nào được khai báo bằng
Ghi chú trên nhiều trình duyệt
Theo đặc tả ECMAScript hiện đại, thứ tự truyền tải của các thuộc tính đối tượng được xác định rõ ràng và ổn định trong quá trình triển khai. Tuy nhiên, trong trường hợp của Internet Explorer, khi một người sử dụng
delete identifier;
delete object.#privateProperty;
1 trên một thuộc tính, một số hành vi khó hiểu sẽ dẫn đến việc ngăn các trình duyệt khác sử dụng các đối tượng đơn giản như các ký tự đối tượng làm mảng kết hợp có thứ tự. Trong Explorer, mặc dù giá trị thuộc tính thực sự được đặt thành delete identifier;
delete object.#privateProperty;
23, nhưng nếu sau đó một người thêm lại thuộc tính có cùng tên, thì thuộc tính đó sẽ được lặp lại ở vị trí cũ của nó — không phải ở cuối trình tự lặp lại như người ta có thể mong đợi sau khi đã xóa Nếu bạn muốn sử dụng một mảng kết hợp có thứ tự với sự hỗ trợ của các thời gian chạy cũ, hãy sử dụng một đối tượng
delete identifier;
delete object.#privateProperty;
24 nếu có [ví dụ: thông qua một polyfill] hoặc mô phỏng cấu trúc này bằng hai mảng riêng biệt [một cho các khóa và một cho các giá trị] ví dụ
Sử dụng xóa
Ghi chú. Ví dụ sau sử dụng các tính năng chỉ dành cho chế độ không nghiêm ngặt, chẳng hạn như ngầm tạo các biến toàn cục và xóa số nhận dạng, những tính năng này bị cấm ở chế độ nghiêm ngặt
delete identifier;
delete object.#privateProperty;
5xóa và chuỗi nguyên mẫu
Trong ví dụ sau, chúng tôi xóa thuộc tính riêng của một đối tượng trong khi thuộc tính có cùng tên có sẵn trên chuỗi nguyên mẫu
delete identifier;
delete object.#privateProperty;
2Xóa phần tử mảng
Khi bạn xóa một phần tử mảng, mảng
delete identifier;
delete object.#privateProperty;
25 không bị ảnh hưởng. Điều này giữ ngay cả khi bạn xóa phần tử cuối cùng của mảngKhi toán tử
delete identifier;
delete object.#privateProperty;
1 loại bỏ một phần tử mảng, phần tử đó không còn trong mảng. Trong ví dụ sau, delete identifier;
delete object.#privateProperty;
27 bị xóa bằng delete identifier;
delete object.#privateProperty;
1delete identifier;
delete object.#privateProperty;
3Điều này tạo ra một mảng thưa thớt với một khe trống. Nếu bạn muốn một phần tử mảng tồn tại nhưng có giá trị không xác định, hãy sử dụng giá trị
delete identifier;
delete object.#privateProperty;
23 thay vì toán tử delete identifier;
delete object.#privateProperty;
1. Trong ví dụ sau, delete identifier;
delete object.#privateProperty;
27 được gán giá trị delete identifier;
delete object.#privateProperty;
23, nhưng phần tử mảng vẫn tồn tạidelete identifier;
delete object.#privateProperty;
8Thay vào đó, nếu bạn muốn xóa một phần tử mảng bằng cách thay đổi nội dung của mảng, hãy sử dụng phương thức
delete identifier;
delete object.#privateProperty;
33. Trong ví dụ sau, delete identifier;
delete object.#privateProperty;
27 bị xóa hoàn toàn khỏi mảng bằng cách sử dụng delete identifier;
delete object.#privateProperty;
33delete identifier;
delete object.#privateProperty;
2Xóa các thuộc tính không thể cấu hình
Khi một thuộc tính được đánh dấu là không thể định cấu hình,
delete identifier;
delete object.#privateProperty;
1 sẽ không có bất kỳ tác dụng nào và sẽ trả về delete identifier;
delete object.#privateProperty;
6. Ở chế độ nghiêm ngặt, điều này sẽ tăng delete identifier;
delete object.#privateProperty;
7delete identifier;
delete object.#privateProperty;
6delete identifier;
delete object.#privateProperty;
59 tạo các thuộc tính không thể định cấu hình và không thể xóa bằng toán tử delete identifier;
delete object.#privateProperty;
1delete identifier;
delete object.#privateProperty;
9Trong chế độ nghiêm ngặt, điều này sẽ đưa ra một ngoại lệ
Xóa thuộc tính toàn cầu
Nếu thuộc tính toàn cầu có thể định cấu hình được [ví dụ: thông qua gán thuộc tính trực tiếp], thuộc tính đó có thể bị xóa và các tham chiếu tiếp theo tới chúng dưới dạng biến toàn cục sẽ tạo ra một
delete identifier;
delete object.#privateProperty;
8