JavaScript/JavaScript 문법

[JavaScript]객체(Object)가 비어있는지 체크하는 방법

DevStory 2021. 12. 2.

이번 포스팅에서는 JavaScript의 객체(Object)가 비어있는지 체크하는 방법을 소개합니다.

 


Object.keys() 함수와 constructor 속성 사용

Object.keys() 함수와 constructor 속성을 같이 사용하여 객체가 비어있는지 확인할 수 있습니다.

 

다음은 Object.keys() 함수와 constructor 속성을 사용한 예제입니다.

const obj1 = { key: ''} ;

console.log(obj1 && Object.keys(obj1).length === 0 && obj1.constructor === Object);
// false

const obj2 = {};

console.log(obj2 && Object.keys(obj2).length === 0 && obj2.constructor === Object);
// true

실행 결과

 

조건문 순서대로 설명

1. 객체가 null 또는 undefined가 아닌지 체크합니다.

 

2. Object.keys(객체).length === 0은 객체에 <key>가 존재하는지 체크합니다.

 

하지만, Object.keys() 함수는 다음 코드처럼 배열에서도 사용할 수 있습니다.

const arr = ['A', 'B'];

console.log(Object.keys(arr).length); // 2

 

3. 체크하려는 값이 객체인지 배열인지 정확하게 확인하기 위해 constructor 속성을 사용합니다.

 

constructor 속성은 생성자를 반환합니다.

const arr = [];

console.log(arr.constructor === Object);
// false

const obj = {};

console.log(obj.constructor === Object);
// true

JSON.stringify()

JSON.stringify() 함수를 사용하여 객체를 확인할 수 있습니다.

 

JSON.stringify() 함수는 JavaScript 객체를 JSON 문자열로 변환합니다.

 

변환된 JSON 문자열이 빈 객체 문자열인 "{}"와 동일한지 비교하여 객체가 비어있는지 확인합니다.

function isEmptyObject(obj) {
  return JSON.stringify(obj) === '{}';
}

console.log(isEmptyObject({}));
// true

console.log(isEmptyObject({key:''}));
// false

실행 결과


Lodash 라이브러리의 isEmpty() 함수

Lodash 라이브러리의 isEmpty() 함수를 사용하여 객체가 비어있는지 확인할 수 있습니다.

console.log(_.isEmpty({}));
// true

console.log(_.isEmpty({key:''}));
// false

for ... in 반복문과 hasOwnProperty() 함수 사용

for ... in 반복문과 hasOwnProperty() 함수 그리고 JSON.stringify() 함수를 조합하여 객체가 비어있는지 확인할 수 있습니다.

 

다음은 for ... in 반복문과 hasOwnProperty() 함수를 사용한 코드입니다.

function isEmpty(obj) { 
  for (const key in obj) { 
    if (obj.hasOwnProperty(key)) { 
      return false; 
    } 
  }
  return JSON.stringify(obj) === JSON.stringify({}); 
}

실행 결과

for ... in 반복문을 사용하여 객체의 key를 반복해서 접근합니다.

 

그리고 key가 객체에 존재하는지 hasOwnProperty() 함수를 사용하여 체크합니다.

 

key가 존재하는 경우 false를 반환하여 빈 객체가 아니라는 것을 확인할 수 있습니다.

 

for ... in 반복문이 종료되었다면, 객체에 key가 존재하지 않는다는 의미입니다.

 

하지만, 객체인지 배열인지 정확하게 알 수 없으므로 JSON.stringify() 함수를 사용하여 객체인지 배열인지 다시 한번 확인합니다.

반응형

댓글