JavaScript 에서 빈 객체를 체크하는 방법입니다.
function isEmptyObj(obj) {
if((Object.keys(obj).length === 0) && (obj.constructor === Object)) {
return true;
}
return false;
}
const obj1 = {};
const obj2 = {name: 'js'};
const arr = [];
const str = "JavaScript";
document.writeln(isEmptyObj(obj1)); // true
document.writeln(isEmptyObj(obj2)); // false
document.writeln(isEmptyObj(arr)); // false
document.writeln(isEmptyObj(str)); // false
obj.constructor === Object
데이터가 객체인지 체크하기 위해서 constructor
를 체크하였습니다.
Object.key(obj).length === 0
*Object.keys()
함수는 파라미터로 입력받은 객체의 key 목록을 배열로 리턴합니다.*
따라서, 만약 Object.keys()
를 호출한 결과 배열의 길이가 0이면 비어있는 객체입니다.
<aside> 💡 Array() 객체 const arr = []; console.log( arr.constructor === Array ); → true
</aside>
function isEmptyObj(obj) {
if(obj.constructor !== Object) {
return false;
}
for(let key in obj) {
if(obj.hasOwnProperty(key)) {
return false;
}
}
return true;
}
const obj1 = {};
const obj2 = {name: 'js'};
const arr = [];
const str = "JavaScript";
document.writeln(isEmptyObj(obj1)); // true
document.writeln(isEmptyObj(obj2)); // false
document.writeln(isEmptyObj(arr)); // false
document.writeln(isEmptyObj(str)); // false
for..in 반복문을 활용하여 빈 객체를 체크할 수 있습니다.
obj.constructor !== Object
앞의 예제와 마찬가지로 데이터 타입 체크를 위해 constructor 를 이용하였습니다.
for(let key in obj)
객체의 모든 속성(property)을 순회하기 위해 for..in 구문을 사용합니다.
obj.hasOwnProperty(key)
객체의 속성값이 존재하는 경우, 즉 객체의 key값이 존재하는 경우 true 아니면 false 를 반환합니다.