동등 연산자, 일치 연산자

2025. 4. 11. 02:32·JavaScript

== (동등 연산자)와 === (일치 연산자)는 JavaScript에서 두 값을 비교할 때 사용되지만, 타입(Type)을 고려하는 방식에서 중요한 차이가 있습니다.

1. == (Loose Equality / 동등 연산자)

  • 동작 방식: 두 피연산자의 값을 비교하기 전에, 만약 **타입이 다르면 JavaScript가 암묵적으로 타입을 변환 (Type Coercion, 타입 강제 변환)**하려고 시도합니다. 타입 변환 후 값이 같으면 true를 반환합니다.
  • 특징: 타입이 다른 값들도 같다고 평가될 수 있습니다.
  • 예시:
    JavaScript
     
    console.log(5 == '5');       // true (문자열 '5'를 숫자 5로 변환 후 비교)
    console.log(1 == true);      // true (불리언 true를 숫자 1로 변환 후 비교)
    console.log(0 == false);     // true (불리언 false를 숫자 0으로 변환 후 비교)
    console.log(null == undefined); // true (== 연산자의 특별 규칙)
    console.log('' == 0);        // true (빈 문자열 ''을 숫자 0으로 변환 후 비교)
    console.log(' \t\r\n ' == 0); // true (공백 문자열을 숫자 0으로 변환 후 비교)
    
  • 주의점: 암묵적 타입 변환 때문에 예측하기 어려운 결과를 낳을 수 있으며, 코드의 의도를 파악하기 어렵게 만들거나 잠재적인 버그의 원인이 될 수 있습니다.

2. === (Strict Equality / 일치 연산자)

  • 동작 방식: 두 피연산자의 값과 타입을 모두 엄격하게 비교합니다. 타입 변환을 전혀 수행하지 않습니다.
  • 특징:
    • 먼저 두 피연산자의 타입이 같은지 확인합니다.
    • 타입이 다르면 즉시 false를 반환합니다.
    • 타입이 같으면 그 때 값(value)이 같은지를 비교합니다.
  • 예시:
    JavaScript
     
    console.log(5 === '5');       // false (타입이 다름: number vs string)
    console.log(1 === true);      // false (타입이 다름: number vs boolean)
    console.log(0 === false);     // false (타입이 다름: number vs boolean)
    console.log(null === undefined); // false (타입이 다름: null vs undefined)
    console.log('' === 0);        // false (타입이 다름: string vs number)
    
    console.log(5 === 5);         // true (타입과 값이 모두 같음)
    console.log('hello' === 'hello'); // true (타입과 값이 모두 같음)
    console.log(null === null);     // true (타입과 값이 모두 같음)
    

핵심 차이 요약:

특징== (동등 연산자)=== (일치 연산자)
비교 대상 값 (Value) 값 (Value) 및 타입 (Type)
타입 변환 수행함 (암묵적 타입 변환) 수행하지 않음
비교 방식 느슨한 비교 (Loose Comparison) 엄격한 비교 (Strict Comparison)
예측 가능성 낮음 (의도치 않은 결과 가능) 높음 (명확하고 예측 가능)
Sheets로 내보내기

권장 사항 (Best Practice):

현대 JavaScript 개발에서는 === (일치 연산자)를 기본적으로 사용하는 것이 강력하게 권장됩니다.

  • 이유: ===는 암묵적인 타입 변환으로 인한 예기치 않은 동작을 방지해주고, 코드의 의도를 더 명확하게 표현하여 버그를 줄이고 가독성을 높입니다.
  • ==는 null과 undefined를 동시에 비교하는 경우 (variable == null 은 variable === null || variable === undefined 와 같음) 등 매우 제한적이고 의도가 명확한 상황에서만 신중하게 사용해야 합니다.

참고: 객체 비교

==와 === 모두 객체(Object, Array 포함)를 비교할 때는 **참조(reference)**를 비교합니다. 즉, 두 변수가 메모리 상의 동일한 객체를 가리키고 있을 때만 true를 반환합니다. 객체의 내용이 같더라도 서로 다른 객체라면 false를 반환합니다.

JavaScript
 
let obj1 = { a: 1 };
let obj2 = { a: 1 };
let obj3 = obj1;

console.log(obj1 == obj2);  // false (내용은 같지만 다른 객체)
console.log(obj1 === obj2); // false (내용은 같지만 다른 객체)
console.log(obj1 == obj3);  // true (같은 객체를 참조)
console.log(obj1 === obj3); // true (같은 객체를 참조)
저작자표시 (새창열림)

'JavaScript' 카테고리의 다른 글

자바 스크립트의 String  (0) 2025.04.12
readFileSync 를 이용한 입력  (0) 2025.04.11
console.log의 인자  (0) 2025.04.11
자바스크립트의 자료형  (0) 2025.04.10
let, const, var  (0) 2025.04.09
'JavaScript' 카테고리의 다른 글
  • readFileSync 를 이용한 입력
  • console.log의 인자
  • 자바스크립트의 자료형
  • let, const, var
람팜팜~
람팜팜~
:)
  • 람팜팜~
    RumPumPum
    람팜팜~
  • 전체
    오늘
    어제
    • 전체 (123)
      • 🎵 일상 (2)
      • JAVA (5)
        • 김영한의 자바 입문 (3)
      • JavaScript (12)
      • ---------------------------.. (0)
      • [게임 개발] 포트폴리오 (2)
        • RPG (1)
        • 슈터-플랫포머 (1)
      • [게임 개발] 개발 일지 (28)
        • RPG (25)
        • TopDownProject (3)
      • [게임 개발] 언리얼엔진 공부 (9)
        • 이득우의 언리얼 프로그래밍 Part.1 (6)
        • 이득우의 언리얼 프로그래밍 Part.2 (1)
        • 개인 메모 (2)
      • [게임 개발] 알고리즘 공부 (60)
        • 프로그래머스 (8)
        • 백준 (52)
        • 개인 메모 (0)
      • [게임 개발] CPP 공부 (2)
        • 이것이 C++ 이다 (1)
        • Effective C++ (0)
        • Effective Modern C++ (0)
        • 홍정모 그래픽스 새싹코스 (1)
      • [게임 개발] CS 공부 (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      누적합
      그리디
      슬라이딩 윈도우
      우선순위 큐
      dfs
      역참조
      dp
      브루트포스
      스레드
      투포인터
      메모리구조
      프로세스
      context switching
      해시
      데드락
      참조자
      문자열
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    람팜팜~
    동등 연산자, 일치 연산자
    상단으로

    티스토리툴바