Cách kiểm tra empty object trong JavaScript

Posted on October 16th, 2019

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à nó không có một thuộc tính enumerable nào cả.

Tức là nó đượ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 thì điều kiện cần là nó phải khác null và khác undefined. Tiếp theo, điều kiện đủ là constructor của nó là Object.

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 check object như sau:

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

Thử kiểm tra lại xem sao:

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ẽ 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.

Vì vậy, 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ụ:

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 phương thức trên:

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

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(isEmpty(a)); // false
console.log(isEmpty(b)); // false
console.log(isEmpty(c)); // false
console.log(isEmpty(d)); // true
console.log(isEmpty(e)); // false
console.log(isEmpty(f)); // false
console.log(isEmpty(g)); // false
console.log(isEmpty(h)); // false

Lời kết

Như vậy là mình đã giới thiệu với bạn cách để kiểm tra empty object trong JavaScript. Nếu có gì thắc mắc hay góp ý thì bạn có thể để lại bình luận xuống phía dưới nhé.

Xin chào và hẹn gặp lại bạn trong bài viết tiếp theo, thân ái!


★ 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é: