Javascript empty array – đừng gán [] thêm một lần nào nữa

Bài viết được sự cho phép của tác giả Kiên Nguyễn

Trong quá trình làm việc với Javascript array, tất nhiên sẽ không tránh khỏi trường hợp ta muốn gán array trở thành empty (Javascript empty array).

Có vô vàn cách để làm điều này, nhưng bài viết hôm nay tôi sẽ chỉ cho các ông thấy gán array cho [] tệ tới mức nào!

1. Thường xuyên sử dụng

Nguyên nhân bao gồm nhiều thứ:

  • Tạo array, dùng lại.
  • Gán array xong muốn empty đi cho đỡ rối.
  • Không có nhu cầu truy xuất data nữa.

Tuy nhiên, hãy cẩn thận khi gán [] nhằm empty array. Tại sao?. Câu trả lời có ngay đây:

2. Thử với ví dụ sau đây

Giả sử, qua vô vàn khó khăn vất vả, ta có array sau đây:

let characters = ["A", "B", "C"];

Sau khi cảm thấy không còn dùng nữa, đối với một lập trình viên bình thường, tất nhiên chỉ đơn giản là:

// Gán array với [] - xong
characters = [];

Có vấn đề khi cố gắng Javascript empty array như vậy không?. Tất nhiên là có chứ!. Nếu ta có một array khác được copy từ array này?

// Gán array với [] - xong
let characters = ["A", "B", "C"];
let copyCharacters = characters;

Chà, copy mà kết quả tất nhiên 2 array y hệt nhau.

console.log(characters)
console.log(copyCharacters)

// ["A", "B", "C"]
// ["A", "B", "C"]

Trường hợp thay đổi một item trong array thứ nhất, tất nhiên nó sẽ có ngay ở array hai. Tuyệt cú mèo!

characters[2] = "D";
console.log(characters)
console.log(copyCharacters)

// ["A", "B", "D"]
// ["A", "B", "D"]
  Object Prototype Javascript – Công cụ hỗ trợ OOP cho JS

3. Cuối cùng thì có gì sai với []

Đây, ngay lúc này empty array thứ nhất. Array thứ 2 có empty cùng luôn không?. Rất tiếc, câu trở lời là không!

characters = [];
// Là phiên bản copy ra, nhưng khi gán [] cho array 1, array 2 lại không refect theo.
console.log(characters)
console.log(copyCharacters)

// []
// ["A", "B", "D"]console.log(characters)

Tại sao?. Nguyên nhân nằm ở việc gán characters = [] thực chất CHỈ TẠO THÊM một instance javascript empty array gán cho characters. Chính vì thế copyCharacters không hề được affected sự empy này.

So when we say, array = [], [] is just a short hand way of allocating some space in memory with no data in it and so array will contain only the reference of the allocated memory space.

Chính vì vậy, khi ta gán array = [], đó là việc ta phân bổ một vùng mermory không có data, do đó mảng thực chất được tham chiếu tới tới không gian bộ nhớ 

Việc sử dụng [] trở nên cực kì nguy hiểm khi có array khác được sao chép ra từ array gốc. Dữ liệu được thao tác nhiều, handle các condition rendering trên screen.

Tìm việc làm Javascript mới nhất cho bạn

4. Làm thế nào để Javascript empty array đúng cách?

Đầu tiên, cách dễ dàng nhất, set length cho array là 1.

// Sử dụng length method là cách không thể dễ dàng hơn.
// Tuy nhìn không nuột như [] nhưng chất lượng thì hơn hẳn?.
characters.length = 0;
console.log(characters)
console.log(copyCharacters)

// []
// []

Cách thứ 2 thì hoa lá cành hơn. Sử dụng method splice của Javascript.

Method splice() chưa bao giờ là lựa chọn tồi. Nguồn/Source: javascripttutorial.net
// splice xem ra cũng là một lựa chọn không tồi!
characters.splice(0, characters.length);
console.log(characters)
console.log(copyCharacters)

// []
// []
  JavaScript Runtime Environment là gì?

5. Tham khảo

Chém gió vài hồi vậy thôi chứ đây là con bug tôi đã gặp và fix từ rất lâu.

Mong rằng bài viết này sẽ giúp các ông tránh lạm dùng [] khi muốn empty gì gì đó trong Javascript nhé. Tại sao lại “gì gì”?.

Vì object cũng thếchả khác gì array cả. Các ông cứ gán null cho nó mà xem! Rảnh thì tham khảo thêm một số bài viết dưới đây nha!

Bài viết gốc được đăng tải tại kieblog.vn

Xem thêm Việc làm IT Hà Nội, đà nẵng, hcm hấp dẫn trên TopDev