[javascript] '==', '===' 차이 ( 나의 삽질.. )

2020. 11. 25. 08:00·Daily Develop
반응형

프로젝트를 진행하는 값이 없는 경우 ( falsy ) 를 체크하기 위한 함수를 생성하였습니다. 

나를 닮았다고 한다....

 

 

 

서버에서 받은 파라미터가 falsy인지 체크하는 함수를 만들었습니다. 

function isNull(value) {
    return value == null || value == undefined || value == '';
}

이제 서버에서 받은 파라미터를 위에서 생성한 메서드에 넣고 null 체크를 하고 jquery show(), hide() 처리를 하려고 했습니다.

 

const response = data.data;

const $detailElement = $("[name=detailName]");

// value = 0 값이 내려왔습니다.
if (isNull(response.value) ) {
    $detailElement.hide();
} else {
    $detailElement.show();
}

당연히 value값은 falsy가 아니므로 show()가 되겠구나하고 돌렸습니다. 

그런데 hide가 되고 있었습니다. "뭐지...???"

한참을 보다가 debug모드로 디버그하니 그제서야 보였습니다.

value == ''

이중 등호를 사용했기에 value 값이 0인데도 불구하고 true가 return되고 있었습니다.

이중 등호는 loose equality로 느슨하게 두 값을 비교합니다.

javascript는 아~~~주 관대한 언어입니다. 알아서 형변환을 해주는 언어입니다.

  • "8" * 1 = 8
  • 8 + "" = "8"
  • 0 = "" => true  // 0이 ''으로 변환됩니다. 

그래서 strick quality로 엄격하게 두값을 비교하도록 변경하였습니다

function isNull(value) {
    return value === null || value === undefined || value === '';
}

형변환은 해주지않습니다! 있는 그대로 비교하기 떄문에 제가 원하는 결과가 출력되는 함수가 완성되었습니다.

 

결론

내가 만든 버그는 내 눈에 보이지 않는다. 단, 다른사람이 보면 1초만에 보인다.. 

 

반응형

'Daily Develop' 카테고리의 다른 글

ThreadPoolTaskExecutor Queue가 full의 처리 정책  (1) 2021.12.21
[JPA] deleteAll() vs deleteAllInBatch()  (0) 2021.07.28
[HttpStatus] API 처리 별 HttpStatus 리턴 코드 정리  (0) 2021.07.13
[코틀린] 한글 깨질 때 인코딩처리  (0) 2021.07.02
[Post] application/x-www-form-urlencoded 데이터 받는 방법, inputStream 주의  (3) 2021.06.18
'Daily Develop' 카테고리의 다른 글
  • [JPA] deleteAll() vs deleteAllInBatch()
  • [HttpStatus] API 처리 별 HttpStatus 리턴 코드 정리
  • [코틀린] 한글 깨질 때 인코딩처리
  • [Post] application/x-www-form-urlencoded 데이터 받는 방법, inputStream 주의
에디개발자
에디개발자
------ 한발자국씩 성장하자 ------ Github: https://github.com/yongtaelim LinkedIn: https://www.linkedin.com/in/%EC%9A%A9%ED%83%9C-%EC%9E%84-622b69218/
    250x250
  • 에디개발자
    에디블로그
    에디개발자
    • 분류 전체보기 (245) N
      • Develop (51)
        • spring-data (28)
        • spring-batch (7)
        • devops (5)
        • java (5)
        • kotlin (3)
        • database (2)
      • MindControl (12)
      • TroubleShooting (16)
      • Study (76)
        • kotlin (16)
        • java (15)
        • spring (6)
        • test (4)
        • message-queue (10)
        • object (22)
      • Develop Tool (1)
      • Daily Develop (7)
      • Book (5)
      • AI (56) N
        • Claude (23) N
        • ChatGPT (11) N
        • Cursor (10) N
        • Gemini (8) N
        • 트랜드 (4)
      • 개발 트렌드 (17) N
        • 데일리 픽 (17) N
        • 툴 리뷰 (0)
      • 개발자 도구 (0)
        • 생산성 툴 (0)
        • 노트 & 지식관리 (0)
        • 협업 & 이슈 (0)
        • 터미널 & 환경 (0)
        • API & DB (0)
        • 에디터 & IDE (0)
  • 인기 글

  • 태그

    스터디
    OpenAI
    객체지향
    claude code
    Ai
    개발자 도구
    ai 코딩
    claude
    코틀린
    cursor
    JPA
    에디
    프로그래밍
    엘레강트
    queryDSL
    ai 정보
    클로드
    AI 활용
    anthropic
    ChatGPT
  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
에디개발자
[javascript] '==', '===' 차이 ( 나의 삽질.. )
상단으로

티스토리툴바