(TIL) 문자열 - 숫자, 숫자 - 문자열

MIN KYOUNG KIM·2022년 2월 16일
0
post-thumbnail

질문: Number + String = String ? Number - String = Number?

let age = "20";
let currentYear = 2022;

currentYear - age;
//expected answer : undefined or Error 발생이겠지?  
*그렇게 생각한 이유: 
1) age는 string 이고 currentYear는 number이다.
서로 다른 데이터 타입이기 때문에 연산이 되지 않을거라고 생각했다. 

콘솔창에 확인차 해보니 결과는...2002. 계산이 되서 나오네요. ㅇ_ㅇ;;?

콘솔로그에 확인차 다른 값들도 넣어보다가 이상한 결과를 발견했습니다.

  • concation: string과 number를 더하면

    • console.log(”2” + 2) 를 할때는 값은 22입니다. type은 문자열입니다.
    • 사전스터디 소헌님 강의에서도 문자열과 숫자를 더한 값의 데이터는 문자열이 된다고 하셨거든요.
  • substract: string과 number를 서로 빼면
    - console.log(”2022”- 2)하면 결과 값은 2022 입니다. 우리가 생각하는 연산이 되네요.
    - typeof를 사용하여 확인하니 데이터의 타입은 숫자입니다. ...문자열이 아니네요.


**질문

문자열과 숫자를 합치거나(+), 숫자와 문자열을 뺄때(-)로 왜 데이터 종류가 달라지나요????????

나와 비슷한 질문을 한 사람의 답변

    • 같은 경우, 디폴트가 string이라고 합니다
    • 일 경우, 스트링에 사용하지 않고, 숫자로 변환해서 사용한다고 하네요.

그렇다면 어떻게 방지해야할까?

  • 물론 아래와 같이 문자열안에 숫자 “30”를 넣지않고 말그래로 문자를 넣으면 위와 같은 고민을 할 필요는 없다.
    - “abcd” + 123456 = abcd123456
    - “abcds” - 12346 = NaN
    - not a number가 뜨니 계산이 되지 않는다

하지만 예를 들어서 실수로 문자열을 받아오게 된다면?? 숫자 계산을 하고 싶어진다면???

내가 찾은 방법

String → Number로 바꿔주는 작업해주기 (참고사이트)

대표적으로 쓰이는 방법 (참고사이트 7가지 방법이 있지만 대표적인 것만 추려봄)

  • parseInt()
  • Number()
  • Math.floor()

근데..실무에서 이런 일이 있을까...요? ..... 궁금해지네요.

멘토님한테 물어보니,
자바스크립트는 타입이 약한 타입이라서, 가끔 저런 현상이 일어난다고 한다.
그래서 가급적이면, 문자열에서 숫자를 뺴거나 숫자에서 문자열을 빼는 행위는 지양한다고 한다.

profile
sin prisa pero sin pausa

0개의 댓글