이번 포스팅에서는 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()
함수를 사용하여 객체인지 배열인지 다시 한번 확인합니다.
'JavaScript > JavaScript 문법' 카테고리의 다른 글
[JavaScript]객체 변경을 방지하는 방법 (0) | 2021.12.06 |
---|---|
[JavaScript]객체(Object)의 freeze(), seal() 함수의 차이점 (0) | 2021.12.06 |
[JavaScript]JSON parse 와 JSON stringify 차이 (0) | 2021.12.02 |
[JavaScript]JSON.parse 및 JSON.stringify를 객체 복사에 사용하면 안되는 이유 (0) | 2021.12.02 |
[JavaScript]console 객체 사용 방법 (0) | 2021.11.29 |
댓글