JavaScript에는 'not in' 연산자가 없습니다
JavaScript에는 Python과 달리 'not in'이라는 전용 연산자가 존재하지 않습니다. 하지만 걱정할 필요는 없습니다. in 연산자 앞에 논리 부정 연산자인 !(NOT)를 붙이면 완전히 동일한 효과를 낼 수 있습니다.
논리 부정 연산자(!) 활용하기
특정 속성이 객체에 존재하지 않는 경우만 처리하고 싶다면, 아래 코드처럼 조건문 전체를 괄호로 감싸고 앞에 !를 붙여주면 됩니다.
var arr = {};
if (!(id in arr)) {
// arr 객체에 id 속성이 존재하지 않을 때 실행
}
else {
// arr 객체에 id 속성이 존재할 때 실행
}위 코드에서 !(id in arr)는 "id라는 속성이 arr 안에 없다"는 의미이므로, if 블록은 속성이 없을 때, else 블록은 속성이 있을 때 각각 실행됩니다.
hasOwnProperty() 메서드 사용하기
객체에 특정 속성이 직접 소유되어 있는지 확인하고 싶다면 hasOwnProperty() 메서드를 사용하는 것이 더 정확합니다. 이 메서드 역시 !와 함께 사용하면 '존재하지 않음'을 판별할 수 있습니다.
if (!arr.hasOwnProperty(id)) {
// arr 객체가 id 속성을 직접 가지고 있지 않을 때 실행
}
else {
// arr 객체가 id 속성을 직접 가지고 있을 때 실행
}두 방식의 차이점: in 연산자는 프로토타입 체인(prototype chain)까지 모두 검사하는 반면, hasOwnProperty()는 해당 객체 자신이 직접 가진 속성만 확인합니다. 상속된 속성은 제외하고 순수하게 객체 자체의 속성만 검사해야 하는 경우라면 hasOwnProperty()를 사용하는 것이 안전합니다.