Trong JavaScript, toán tử xóa được sử dụng để xóa một thuộc tính của một đối tượng. Sau khi xóa thuộc tính thực tế, thuộc tính đó sẽ không thể truy cập được và trả về undefined
Lời gọi của toán tử delete
trả về true
khi nó loại bỏ một thuộc tính và false
ngược lại. nó chỉ có tác dụng với thuộc tính của đối tượng, nó không có tác dụng với tên biến hay hàm
Toán tử xóa không nên được sử dụng trên các thuộc tính đối tượng JavaScript được xác định trước như các đối tượng window
, Math
và Date
. Nó có thể làm hỏng ứng dụng của bạn
Hãy xem xét kỹ lưỡng một số sự thật về toán tử delete
Xóa thuộc tính đối tượng
Cách duy nhất để loại bỏ hoàn toàn các thuộc tính của một đối tượng trong JavaScript là sử dụng toán tử delete
Nếu thuộc tính mà bạn đang cố xóa không tồn tại, thao tác xóa sẽ không có bất kỳ tác dụng nào và có thể trả về true
Chúng ta có thể xóa các biến trong Javascript không?
Toán tử xóa xóa thuộc tính khỏi đối tượng. Nó không thể xóa một biến. Không thể xóa bất kỳ thuộc tính nào được khai báo với ____17_______ khỏi phạm vi toàn cầu hoặc khỏi phạm vi của hàm
Nếu bạn khai báo một biến mà không có var, nó có thể bị xóa. Hãy xem ví dụ dưới đây
Biến được khai báo không có từ khóa delete
0 lưu trữ bên trong nó như một thuộc tính của đối tượng delete
1. Vì vậy, chúng ta có thể xóa các thuộc tính của đối tượng delete
1
Chúng ta có thể xóa các giá trị khỏi một mảng không?
Vì các mảng JavaScript là các đối tượng, các phần tử có thể bị xóa bằng cách sử dụng delete
delete
sẽ xóa thuộc tính đối tượng, nhưng sẽ không lập chỉ mục lại mảng hoặc cập nhật độ dài của nó. Điều này làm cho nó xuất hiện như thể nó là undefined
Sử dụng delete
có thể để lại các lỗ không xác định trong mảng. Thay vào đó, hãy sử dụng delete
7, delete
8 hoặc delete
9
Chúng ta có thể xóa các đối tượng tích hợp không?
Việc xóa các đối tượng tích hợp sẵn như các đối tượng Math
, Date
và window
là không an toàn và chúng có thể làm hỏng toàn bộ ứng dụng của bạn
Xóa các thuộc tính không thể cấu hình
Thuộc tính đối tượng, bên cạnh một true
3, có ba thuộc tính đặc biệt
true
4 – nếutrue
, giá trị có thể được thay đổi, nếu không, nó chỉ đọctrue
6 – nếutrue
, nó được liệt kê trong các vòng lặp, nếu không thì không được liệt kêtrue
8 – nếutrue
9, thuộc tính có thể bị xóa hoặc thuộc tính có thể được sửa đổi, nếu không thì không thể thay đổi
Không thể xóa các giá trị được gán bằng cách sử dụng false
0 và đặt thành false
1 trong một đối tượng
Ở chế độ nghiêm ngặt, nó sẽ báo lỗi nếu bạn cố xóa thuộc tính không thể định cấu hình
Phần kết luận
delete
là cách thực sự duy nhất để loại bỏ các thuộc tính của đối tượng mà không có bất kỳ phần còn lại nào, nhưng nó hoạt động chậm hơn ~100 lần nếu bạn đang sử dụng delete
trong các vòng lặp
Giải pháp thay thế là đặt giá trị thành ufalse
4được xác định như false
5. Nó không xóa hoàn toàn thuộc tính, nó chỉ đặt giá trị thành không xác định. sự lựa chọn không chính xác là một giải pháp nổi bật, nhưng nếu bạn sử dụng nó một cách cẩn thận thì bạn sẽ có thể cải thiện hiệu suất
Bạn có một đối tượng với một số thuộc tính và bạn muốn loại bỏ một số thuộc tính này trước khi sử dụng thêm đối tượng
let person = {
firstName: "John",
lastName: "Doe",
gender: "Male",
age: 34
};
const json = JSON.stringify[person];
console.log[json];
// => {"firstName":"John","lastName":"Doe","gender":"Male","age":34}
// What can we do if we don't want the `age` property in the JSON string? -->
Ở đây, chuỗi JSON cũng chứa thuộc tính age
. Tuy nhiên, bạn sẽ gửi chuỗi qua mạng và máy chủ ở đầu bên kia sẽ không sử dụng thuộc tính age
. Vì vậy, bạn muốn xóa thuộc tính age
khỏi đối tượng person
trước khi chuyển đổi nó thành chuỗi JSON
Giải pháp
Bạn có thể sử dụng toán tử delete
, đơn giản hơn hoặc hủy đối tượng, có thể xóa nhiều thuộc tính cùng một lúc
Sử dụng toán tử delete
Sử dụng toán tử delete
để xóa thuộc tính khỏi đối tượng
let person = {
firstName: "John",
lastName: "Doe",
gender: "Male",
age: 34
};
// Delete the age property first
delete person.age;
let json = JSON.stringify[person];
console.log[json];
Toán tử delete
sẽ trả về nếu nó thành công và luôn trả về
let person = {
firstName: "John",
lastName: "Doe",
gender: "Male",
age: 34
};
// Delete the age property first
delete person.age;
let json = JSON.stringify[person];
console.log[json];
1 - ngay cả khi thuộc tính không tồn tại. Cuộc gọi sẽ chỉ trả về let person = {
firstName: "John",
lastName: "Doe",
gender: "Male",
age: 34
};
// Delete the age property first
delete person.age;
let json = JSON.stringify[person];
console.log[json];
2 khi một thuộc tính không thể định cấu hình - đó là trường hợp đối với các thuộc tính trên các đối tượng tích hợp như let person = {
firstName: "John",
lastName: "Doe",
gender: "Male",
age: 34
};
// Delete the age property first
delete person.age;
let json = JSON.stringify[person];
console.log[json];
3 của một let person = {
firstName: "John",
lastName: "Doe",
gender: "Male",
age: 34
};
// Delete the age property first
delete person.age;
let json = JSON.stringify[person];
console.log[json];
4Sử dụng phá hủy đối tượng
Toán tử delete
chỉ có thể xóa một thuộc tính cho mỗi cuộc gọi. Vì vậy, nếu bạn muốn xóa các thuộc tính age
và
let person = {
firstName: "John",
lastName: "Doe",
gender: "Male",
age: 34
};
// Delete the age property first
delete person.age;
let json = JSON.stringify[person];
console.log[json];
7, thì bạn phải thực hiện hai cuộc gọi delete
. Thay vào đó, bạn có thể sử dụng tính năng hủy đối tượng để xóa nhiều thuộc tính bằng một lệnh gọi const person = {
firstName: "John",
lastName: "Doe",
gender: "Male",
age: 34
};
// Destructure the age and gender
const {age, gender, ...personTrimmed} = person;
const json = JSON.stringify[personTrimmed];
console.log[json];
Lưu ý rằng quá trình hủy chậm hơn đáng kể so với toán tử delete
bởi vì nó tạo ra một đối tượng mới sao chép từ đối tượng ban đầu. Hủy cấu trúc cũng không được hỗ trợ bởi bất kỳ phiên bản IE nào