Xóa nhiều thuộc tính khỏi đối tượng javascript

Trong bài viết này, chúng ta sẽ cố gắng hiểu cách thêm thuộc tính vào đối tượng cũng như cách thêm hoặc xóa thuộc tính khỏi đối tượng trong JavaScript

Trước khi chúng ta thực sự xem việc thêm và xóa các thuộc tính khỏi một đối tượng, trước tiên chúng ta hãy hiểu những điều cơ bản về một đối tượng trong JavaScript

Vật

  • Một đối tượng trong JavaScript là tập hợp các thuộc tính
  • Một thuộc tính duy nhất trong một đối tượng JavaScript thực sự là sự kết hợp giữa tên [hoặc khóa] và một giá trị
  • Một đối tượng có thể chứa một số thuộc tính khác nhau có tên cũng như giá trị khác nhau

cú pháp. Bằng cách sử dụng cú pháp sau, người ta có thể dễ dàng tạo một đối tượng với một số thuộc tính khác nhau

let object_name =
{
    property_name: value,
    ...
}

Bây giờ chúng ta đã hiểu các chi tiết cơ bản liên quan đến đối tượng trong JavaScript, hãy xem một số ví dụ để thêm thuộc tính vào đối tượng cũng như cách xóa thuộc tính khỏi đối tượng

Thêm/Xóa Thuộc tính khỏi Đối tượng

  • Như được mô tả trong hình minh họa ở trên, chúng ta có thể dễ dàng thêm hoặc xóa một số thuộc tính khỏi một đối tượng trong JavaScript bằng cách làm theo các phương pháp hoặc kỹ thuật nhất định
  • Để thêm bất kỳ thuộc tính nào, người ta có thể sử dụng object_name. property_name = giá trị [hoặc] object_name[“property_name”] = giá trị
  • Để xóa bất kỳ thuộc tính nào, người ta có thể dễ dàng sử dụng xóa object_name. property_name [hoặc]  xóa object_name[“property_name”]

Hãy cho chúng tôi xem một số ví dụ để hiểu rõ hơn về cách thêm và xóa các thuộc tính khỏi một đối tượng

ví dụ 1. Trong ví dụ này, trước tiên chúng ta tạo một đối tượng và sau đó chúng ta sẽ thêm một số thuộc tính vào đối tượng đó

Toán tử xóa được thiết kế để sử dụng trên các thuộc tính đối tượng. Nó không ảnh hưởng đến các biến hoặc chức năng

Ghi chú. Không nên sử dụng toán tử xóa trên các thuộc tính đối tượng JavaScript được xác định trước. Nó có thể làm hỏng ứng dụng của bạn

Toán tử

delete identifier;
delete object.#privateProperty;
1 xóa thuộc tính khỏi đố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óng

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ĩa

delete identifier;
delete object.#privateProperty;
3

Tê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;
4

Thuộc tính cần xóa

delete identifier;
delete object.#privateProperty;
5 cho tất cả các trường hợp trừ khi tài sản là tài sản riêng, trong trường hợp đó,
delete identifier;
delete object.#privateProperty;
6 được trả lại ở chế độ không nghiêm ngặt

delete identifier;
delete object.#privateProperty;
7

Bị 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;
8

Bị ném nếu

delete identifier;
delete object.#privateProperty;
3 là
delete identifier;
delete object.#privateProperty;
10

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 identifier;
delete object.#privateProperty;
12. 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ặt

delete 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. Trong khi

delete identifier;
delete object.#privateProperty;
13 nếu
delete identifier;
delete object.#privateProperty;
14 đề 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, bạn nên tránh biểu mẫu này và thay vào đó hãy thêm tiền tố vào nó bằng
delete identifier;
delete object.#privateProperty;
15

Mặ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 identifier;
delete object.#privateProperty;
1

Toá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ì
    delete identifier;
    delete object.#privateProperty;
    
    1 sẽ không có bất kỳ hiệu lực nào và sẽ trả về
    delete identifier;
    delete object.#privateProperty;
    
    5
  • delete 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ẫu
  • 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ư
    delete object.property
    delete object[property]
    
    63,
    delete object.property
    delete object[property]
    
    64,
    delete object.property
    delete object[property]
    
    65 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 object.property
    delete object[property]
    
    66
  • Xóa các biến, bao gồm các tham số chức năng, không bao giờ hoạt động.
    delete object.property
    delete object[property]
    
    67 sẽ ném một
    delete object.property
    delete object[property]
    
    68 ở chế độ nghiêm ngặt và sẽ không có tác dụng ở chế độ không nghiêm ngặt
    • Bất kỳ biến nào được khai báo với
      delete object.property
      delete object[property]
      
      69 đều không thể bị xóa 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 được
    • Không thể xóa bất kỳ biến nào được khai báo bằng
      delete identifier;
      delete object.#privateProperty;
      
      30 hoặc
      delete identifier;
      delete object.#privateProperty;
      
      31 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ượng

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;
33, 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ũ — 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 thời gian chạy cũ, hãy sử dụng đối tượng

delete identifier;
delete object.#privateProperty;
34 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ị]

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 object.property
delete object[property]
6

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;
3

Khi bạn xóa một phần tử mảng, mảng

delete identifier;
delete object.#privateProperty;
35 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ảng

Khi 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;
37 bị xóa bằng
delete identifier;
delete object.#privateProperty;
1

delete identifier;
delete object.#privateProperty;
4

Điều này tạo ra mộ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;
33 thay cho toán tử
delete identifier;
delete object.#privateProperty;
1. Trong ví dụ sau,
delete identifier;
delete object.#privateProperty;
37 được gán giá trị
delete identifier;
delete object.#privateProperty;
33, nhưng phần tử mảng vẫn tồn tại

delete identifier;
delete object.#privateProperty;
9

Thay 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;
43. Trong ví dụ sau,
delete identifier;
delete object.#privateProperty;
37 bị xóa hoàn toàn khỏi mảng bằng cách sử dụng
delete identifier;
delete object.#privateProperty;
43

delete identifier;
delete object.#privateProperty;
3

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;
7

delete identifier;
delete object.#privateProperty;
7

delete object.property
delete object[property]
69 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;
1

delete identifier;
delete object.#privateProperty;
0

Trong chế độ nghiêm ngặt, điều này sẽ đưa ra một ngoại lệ

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

Làm cách nào để xóa nhiều thuộc tính khỏi đối tượng trong js?

Bạn có thể sử dụng toán tử xóa , đơn giản hơn hoặc phá hủy đối tượng, có thể xóa nhiều thuộc tính cùng một lúc.

Làm cách nào để xóa một số thuộc tính khỏi đối tượng JavaScript?

Trong JavaScript, có 2 cách phổ biến để xóa thuộc tính khỏi đối tượng. Cách tiếp cận có thể thay đổi đầu tiên là sử dụng đối tượng xóa. người điều hành thuộc tính . Cách tiếp cận thứ hai, không thay đổi vì nó không sửa đổi đối tượng ban đầu, là gọi cú pháp phá hủy và trải rộng đối tượng. const {thuộc tính,.

Làm cách nào để xóa nhiều khóa khỏi đối tượng js?

hàm bỏ qua lấy đối tượng của bạn và một mảng khóa mà bạn muốn xóa rồi trả về một đối tượng mới với tất cả các thuộc tính của đối tượng ban đầu ngoại trừ các thuộc tính được đề cập trong mảng . Đây là một cách gọn gàng để loại bỏ các phím vì sử dụng cách này bạn có được một đối tượng mới và đối tượng ban đầu vẫn còn nguyên.

Làm thế nào chúng ta có thể xóa các thuộc tính trên các đối tượng?

Xóa Thuộc tính khỏi Đối tượng . Sau khi xóa, tài sản không thể được sử dụng trước khi nó được thêm lại. Toán tử xóa được thiết kế để sử dụng trên các thuộc tính đối tượng. Nó không ảnh hưởng đến các biến hoặc chức năng. The delete operator deletes both the value of the property and the property itself. After deletion, the property cannot be used before it is added back again. The delete operator is designed to be used on object properties. It has no effect on variables or functions.

Chủ Đề