Cách kiểm tra empty object trong JavaScript?

Cập nhật ngày 18/12/2021

Giả sử bạn đang muốn kiểm tra empty object đối với một giá trị cho trước, với empty object được hiểu như sau:

  • Đó là một object.
  • Và object đó không có một thuộc tính enumerable nào cả.

Nói cách khác, empty object được biểu diễn như sau:

const emptyObject = {};

Vậy cách để kiểm tra empty object là gì?

Cách kiểm tra empty object trong JavaScript

Như mình đã nói ở trên, empty object phải thỏa mãn cả 2 điều kiện: là object và không có thuộc tính enumerable. Vì vậy, mình sẽ kiểm tra từng thành phần như sau.

Kiểm tra là object

Để một giá trị là object:

  • Điều kiện cần: khác null và khác undefined.
  • Điều kiện đủ: hàm khởi tạo constructor phải là Object.

Một số ví dụ:

const a = 1,
  b = "hello",
  c = [1, 2],
  d = { x: 6 },
  e = () => {};

console.log(a.constructor); // Number
console.log(b.constructor); // String
console.log(c.constructor); // Array
console.log(d.constructor); // Object
console.log(e.constructor); // Function

Như vậy, mình sẽ viết hàm để kiểm tra object như sau:

const isObject = (v) => {
  return !!v && v.constructor === Object;
};

Thử kiểm tra lại:

const a = 1,
  b = "hello",
  c = [1, 2],
  d = { x: 6 },
  e = () => {},
  f = null,
  g = undefined;

console.log(isObject(a)); // false
console.log(isObject(b)); // false
console.log(isObject(c)); // false
console.log(isObject(d)); // true
console.log(isObject(e)); // false
console.log(isObject(f)); // false
console.log(isObject(g)); // false

Kết quả hiện thị bên trên là đúng với yêu cầu. Tiếp theo, mình sẽ triển khai phần kiểm tra object là empty.

Kiểm tra object là empty

Để kiểm tra object là empty trong ES6, mình sử dụng phương thức Object.keys(). Phương thức này trả về một mảng chứa tất cả các thuộc tính enumerable của object.

Nếu kết quả trả về là mảng rỗng thì suy ra object đó không chứa thuộc tính enumerable nào.

Ví dụ sử dụng Object.keys():

const a = {},
  b = { x: 1 },
  c = { m: "a", n: "b" };

console.log(Object.keys(a)); // []
console.log(Object.keys(b)); // ["x"]
console.log(Object.keys(c)); // ["m", "n"]

Bây giờ, mình sẽ viết hàm kiểm tra object có empty hay không như sau:

const isEmpty = (v) => {
  return Object.keys(v).length === 0;
};

Kiểm tra lại hàm isEmpty():

const a = {},
  b = { x: 1 },
  c = { m: "a", n: "b" };

console.log(isEmpty(a)); // true
console.log(isEmpty(b)); // false
console.log(isEmpty(c)); // false

Kết quả lần này lại đúng như mong đợi.

Tổng hợp cách kiểm tra empty object trong JavaScript

Kết hợp 2 đoạn kiểm tra trên, mình suy ra hàm để kiểm tra empty object trong JavaScript là:

const isEmptyObject = (v) => {
  return !!v && v.constructor === Object && Object.keys(v).length === 0;
};

Một số ví dụ:

const a = 1,
  b = "hello",
  c = [1, 2],
  d = {},
  e = () => {},
  f = null,
  g = undefined,
  h = { a: 1, b: 2, c: "3" };

console.log(isEmptyObject(a)); // false
console.log(isEmptyObject(b)); // false
console.log(isEmptyObject(c)); // false
console.log(isEmptyObject(d)); // true
console.log(isEmptyObject(e)); // false
console.log(isEmptyObject(f)); // false
console.log(isEmptyObject(g)); // false
console.log(isEmptyObject(h)); // false

Tham khảo:

★ Nếu bạn thấy bài viết này hay thì hãy theo dõi mình trên Facebook để nhận được thông báo khi có bài viết mới nhất nhé:

Cách sử dụng hằng số trong ES5 và ES6?
Làm sao để bắt buộc truyền tham số vào hàm?
Chia sẻ:

Bình luận