Programing/javascript

JavaScript 비교 연산자

2025. 5. 18. 08:22
반응형

JavaScript의 비교 연산자는 단순히 ==, ===를 넘어서서 다양한 상황에서 중요한 역할을 합니다. 이 글에서는 헷갈리기 쉬운 비교 연산자들의 차이와 실제 사용 시 주의할 점들을 상세히 정리합니다.


1. 느슨한 비교 (==) vs 엄격한 비교 (===)

console.log(1 == '1');   // true
console.log(1 === '1');  // false
  • ==는 타입을 자동 변환하여 값만 비교합니다 (type coercion)
  • ===는 타입과 값 모두를 비교하므로 더 안전하고 예측 가능합니다

대부분의 경우 === 사용을 권장합니다.


2. != vs !==

console.log(null != undefined);  // false
console.log(null !== undefined); // true
  • !=는 ==처럼 자동 타입 변환을 수행
  • !==는 타입과 값 모두 비교하는 반면, !=는 느슨하게 동작합니다

3. 숫자/문자 비교의 차이점

console.log('10' < 5);       // false ('10' → 10으로 변환됨)
console.log('apple' < 'cat'); // true (사전 순 정렬 기준)
  • 숫자 비교는 대부분 타입 변환이 이루어지지만
  • 문자열 간 비교는 유니코드 값을 기준으로 정렬

4. 객체 비교는 참조 기준

const a = { x: 1 };
const b = { x: 1 };
console.log(a === b); // false

const c = a;
console.log(a === c); // true
  • 객체, 배열 등은 내용이 같더라도 참조가 다르면 false입니다
  • 비교 시 값이 아닌 참조 주소를 비교한다는 점 주의

5. NaN은 자기 자신과도 다르다

console.log(NaN === NaN);         // false
console.log(Object.is(NaN, NaN)); // true
  • NaN은 ===로 비교해도 false가 나옵니다
  • Object.is()는 NaN, +0, -0도 정확히 비교 가능

6. valueOf와 toString에 의한 비교

const obj = {
  valueOf() { return 123; }
};

console.log(obj == 123); // true
  • 객체와 기본형을 비교할 때 valueOf()나 toString()이 자동 호출되어 변환됨
  • 객체 비교 시에는 이런 자동 변환이 예기치 못한 결과를 만들 수 있으므로 주의

7. Boolean 비교와 암묵적 변환 주의

console.log(false == 0);   // true
console.log(false === 0);  // false

console.log('' == false);  // true
console.log([] == false);  // true
console.log({} == false);  // false
  • ==는 예외적인 규칙이 많아 혼란을 유발할 수 있음
  • === 사용 시 이런 예외 없이 명확한 비교 가능

8. null / undefined 비교

console.log(null == undefined);  // true
console.log(null === undefined); // false
  • null과 undefined는 == 비교에서만 서로 같음
  • ===로 비교하면 false

마무리

JavaScript의 비교 연산자는 간단해 보이지만 의외로 많은 함정을 포함하고 있습니다. 특히 ==와 ===, 객체 참조 비교, NaN의 비교 등은 자주 실수할 수 있는 부분입니다.

항상 명확하고 예측 가능한 코드를 위해서는 ===, !==를 기본으로 사용하고, 필요한 경우에만 타입 강제 변환을 허용하는 것이 좋습니다.

실수 줄이기 팁: ESLint의 eqeqeq 규칙을 활성화하여 == 사용을 제한하는 것도 좋은 방법입니다.

 

반응형

'Programing > javascript' 카테고리의 다른 글

JavaScript로 구현하는 금액 단축 표기 (K / M / B 표기법)  (0) 2025.05.27
JavaScript로 구현하는 금액의 영어 단위 변환 (Number to Words)  (0) 2025.05.27
기수 정렬 (Radix Sort) 설명과 JavaScript 예제  (1) 2025.05.22
힙 정렬 (Heap Sort) 설명과 JavaScript 예제  (0) 2025.05.22
JavaScript 조건문  (0) 2025.05.18
JavaScript 반복문  (0) 2025.05.18
함수 선언식과 함수 표현식의 차이  (2) 2025.05.05
함정에 빠지기 쉬운 자바스크립트 문법12  (0) 2025.05.05
'Programing/javascript' 카테고리의 다른 글
  • 기수 정렬 (Radix Sort) 설명과 JavaScript 예제
  • 힙 정렬 (Heap Sort) 설명과 JavaScript 예제
  • JavaScript 조건문
  • JavaScript 반복문
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (478)
      • 금융 (61)
      • Programing (295)
        • Algorithm (39)
        • API (2)
        • javascript (122)
        • CSS (8)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (21)
        • MS-SQL (1)
        • MySQL (13)
        • 보안 (5)
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (6)
      • IT 일반 (15)
      • 리뷰 (38)
        • Book (17)
        • 제품 (2)
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (36)
        • 회고 (3)
        • 컬럼 (4)
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    사고 싶은 책
    jsp
    Java
    블로그
    js패턴
    위시리스트
    It
    자바스크립트유틸
    IT 관련
    php
    디자인패턴
    자바스크립트
    iT's MY LiFE
    JavaScript
    읽고 싶은 책
    IT·컴퓨터
    자바
    기초
    IT블로그
    SQL
Dongkkase
JavaScript 비교 연산자
상단으로

티스토리툴바