달마루
기획자에서 개발자로
달마루
전체 방문자
오늘
어제
  • 분류 전체보기 (334)
    • 기획 이야기 (3)
    • 개발자로 전향한 이유 (1)
    • Github Address (1)
    • 개발자, 그 여정 (11)
      • 기초특강 (4)
      • 국비학원 선정 (4)
      • BitCamp_수업내용 (1)
      • 학원 프로젝트 후기 (1)
      • 정보처리기사 (1)
      • 개발 이야기 (0)
    • 개념 창고 (126)
      • JAVA (50)
      • CS (1)
      • Database (27)
      • NetWork (2)
      • 자료 구조 (2)
      • React (8)
      • Spring (3)
      • JPA (1)
      • HTML & CSS (18)
      • JS (3)
    • algorithm (186)
      • 백준 (161)
      • 프로그래머스 (23)
    • 사는 이야기 (0)

블로그 메뉴

  • Github
  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 백준문제풀이
  • Bronze IV
  • programmers
  • 백준알고리즘
  • sql 문제풀이
  • 알고리즘풀이
  • react
  • HTML
  • math
  • 백준
  • 프로그래머스
  • 혼공SQL
  • 문제풀이
  • BOJ
  • SQL
  • Algorithm
  • BOJ algorithm
  • MySQL
  • BRONZE
  • Scanner
  • java algorithm
  • 알고리즘
  • SQL고득점Kit
  • 자바
  • 혼공MySQL
  • Bronze III
  • java
  • 혼자공부하는SQL
  • Bronze V
  • select

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
달마루

기획자에서 개발자로

개념 창고/JS

[JavaScript] ==, === 비교 연산자 차이

2024. 7. 30. 12:48

Javascript를 사용 중에 값을 비교시엔
비교연산자인 ==연산자와 ===연산자를 사용한다.

두 연산자 모두 비교한 피연산자 값이 일치하면 ture값을 반환하고,
비교한 피연산자 값이 일치하지 않으면 false를 반환한다.

하지만 값을 비교할 때
== 연산자보다는 === 연산자를 사용할 것을 권장하고 있다.

그 이유가 뭘까? 

== 연산자는 Equal Operator(비교연산자),
===연산자는 Strict Equal Operator(엄격한 비교 연산자)이기 때문이다.

두 연산자를 코드를 통해 쉽게 예를 들어 보자면 아래와 같다. 

1. == 연산자

100 == 100        // true
100 == '100'      // true
1 == true         // true
true == 'true'    // true
null == undefined // true

 == 비교 연산자는 두 값을 비교해서 같으면 true 다르면 false 값을 리턴
두 피연산자 값이 서로 타입이 다를 경우에는 자동으로 일부 피연산자의 타입을 변환한 후에 값을 비교한다.

2. === 비교 연산자

100 === 100        // true
100 === '100'      // false
1 === true         // false
true === 'true'    // false
null === undefined // false
NaN === NaN        // false

피연산자 값의 타입이 서로 다르면 자동으로 타입을 반환해 주는 == 연산자와 달리
=== 연산자는 두 피연산자 값의 타입이 서로 다르더라도 변환하지 않고
있는 그대로의 값을 비교하는 방식으로 엄격하게 값을 비교한다.
  
또한 NaN 값은 자기 자신을 포함하여 어떠한 값과도 일치하지 않는다.
즉, NaN 값과 비교하게 되면 항상 false의 값이 반환된다. 

== 연산자에서 타입이 다르면 알아서 변환해주기 때문에
숫자 1 과 문자 '1'을 동일하게 판단할 수 있다. 결과가 달라진다는 것이다.
그럼 확인과 검증이 무의미해지는 것이고, 
비즈니스로직에서 해당 값으로 분기처리를 한다면 완전히 다른 결과를 낼 것이다.

Fe 에서 Be로 보낼 때 데이터 타입이 달라서 나는 오류는 자주 겪을 것이다.
자동으로 변환해주는 자바스크립트의 편리함(?)으로
에러는 피하더라도 오히려 혼선을 가져올 수 있다.

그래서 타입을 지정해서 타입스크립트를 쓰는 것이다. 
컴파일 단계에서 오류 포착을 할 수 있다는 장점도 있지만 일단 넘어가고
불명확하게 지정해버릴 수 있는게 JS의 장점이자 단점, 양날의 검이다. 

프로그래밍은 확실해야하니까, 확실하고 명확하게 지정하는 것이 좋다.  

저작자표시 비영리 변경금지 (새창열림)

'개념 창고 > JS' 카테고리의 다른 글

JSON.stringify(value, replacer, space) 설명  (0) 2024.08.08
[JQuery] JQuery 기본문법  (0) 2023.03.22
    '개념 창고/JS' 카테고리의 다른 글
    • JSON.stringify(value, replacer, space) 설명
    • [JQuery] JQuery 기본문법
    달마루
    달마루
    항상 어제보다 좋은 코드를 지향합니다. https://github.com/LimDongHyun99

    티스토리툴바