객체 안에 값이 들어있는지 확인하고 싶다면??
먼저 단순하게 생각해 봤을 때
const obj = {};
if (obj === {}) {
console.log("빈 객체입니다");
}
위의 경우에 if 조건문이 true가 될 것 같습니다.
하지만 자바스크립트에서 동등연산자(==)와 일치 연산자(===)는
Abstract Equality Comparison Algorithm를 사용합니다.
그리고 해당 알고리즘을 살펴보면
Return true if x and y refer to the same object. Otherwise, return false.
두 값이 같은 객체를 참조할 때만 true를 반환한다고 되어있습니다.
하지만 단순하게 obj === {}으로 비교한다면 안에 프로퍼티가 비어있다는 점은 동일하겠지만
객체는 서로 다른 객체이기 때문에 false를 반환하게 됩니다.
따라서 위와 같은 방법으로는 비어있는 객체인지 확인할 수 없겠죠??
그럼 어떻게 해서 확인해볼 수 있을 까요??
Object.keys()를 이용하는 방법
먼저 Object.keys()를 이용하는 방법에 대해 설명해 드리겠습니다.
해당 메서드는 객체 안에 key값들을 배열로 반환하는 기능을 가지고 있습니다.
그런데 객체가 비어있다면 key가 없으므로 빈 배열 []이 반환되겠죠??
배열은 length가 나오기 때문에 length가 0인지 확인하면 객체가 빈 값인지 확인할 수 있는 것입니다.
const obj = {};
if (Object.keys(obj).length === 0) {
console.log("빈 객체입니다");
}
이렇게 하면 간단하게 확인할 수 있겠죠??
JSON.stringify()를 이용하는 방법
JSON.stringify()을 이용하는 방법도 있습니다.
해당 메서드는 객체를 JSON 문자열로 변환하는 기능을 가지고 있습니다.
그렇기 때문에 객체가 빈 값이면 "{}"으로 반환될 것이고 그것을 이용해 빈 객체인지 확인이 가능합니다.
const obj = {};
if (JSON.stringify(obj) === "{}") {
console.log("빈 객체입니다");
}
두 가지 방법 중에 편하신 방법을 사용해 주시면 됩니다.
저 같은 경우에는 아래 방법을 더 선호하는데요.
자바스크립트에서는 숫자, 문자열, boolean, undefined 타입 외에는 다 객체로 취급하기 때문에
아래 방법을 사용하면 타입까지 체크하기 더 용이하기 때문입니다.
만약 첫 번째 방법에서 타입을 체크하고 싶다면 constructor를 이용하면 됩니다.
const obj = {};
const arr = [];
obj.constructor === Object // true;
obj.constructor === Array // false;
arr.constructor === Object // false;
arr.constructor === Array // true;
'IT > javascript' 카테고리의 다른 글
[javascript] range slider 양옆에 버튼을 두고 25% 단위로 값 조절하는 함수 만들기 (0) | 2023.08.02 |
---|---|
[javascript] 특정 시간만큼 대기시키는 함수 만들기(setTimeout(), Promise, async await) (1) | 2023.08.01 |
[javascript] 랜덤 문자열 생성하는 방법 (0) | 2023.02.02 |