본문 바로가기
  • 사람은 무언가를 배울 필요가 있을때가 되서야 비로소 배우게 된다.
JavaScript

JS 형변환에 대해서

by YoHaYo 2023. 10. 6.
728x90
반응형

코드 1

function detectAge() {
  let age;
  age = prompt('나이는?'); 
  if (age >= 19) {
    alert("성인입니다. 입장가능.")
  } else if (age > 12) {
    alert("청소년입니다.")
  } else {
    alert("어린이입니다.")
  }

  console.log(typeof age); // string
}

코드 2

function detectAge() {
  let age;
  age = +prompt('나이는?'); //+를 붙여서 숫자열로 바꿈
  if (age >= 19) {
    alert("성인입니다. 입장가능.")
  } else if (age > 12) {
    alert("청소년입니다.")
  } else {
    alert("어린이입니다.")
  }

  console.log(typeof age); // string
}

prompt 메소드는 입력값을 string 타입으로 출력한다.

코드1에서는 입력한 값이 string 타입으로 출력된다.

코드2에서는 number 타입으로 출력된다.

 

만약에 age를 20을 입력한 상황을 가정하자.

 

그렇다면

 코드1에서는 "20"과 19를 비교하고,

 코드2에서는 20과 19를 비교하는 셈이다. 그럼 코드1에서는 오류가 발생할까??

 

 

 

 

 

정답은 둘다 정상작동한다.

 

왜 그럴까? 이유는 자바스크립트가 자동으로 타입을 변환 시켜주기 때문이다.

 

자바스크립트같은 동적언어들은 자동 타입변환을 시켜 비교해준다. 

 

또한 파이썬, 루비, php도 자동 타입 변환 가능하다

그러나 C, Java같은 정적언어는 자동 타입 변환이 불가능하다.

 

참고 : 자동 타입 변환이 일어나는 경우.

 

비교 연산자: 비교 연산자(<, >, <=, >=, ==, ===, !=, !==)를 사용할 때, JavaScript는 피연산자의 데이터 유형을 일치시키려고 시도합니다.
산술 연산자: 산술 연산자(+, -, *, / 등)를 사용할 때, 피연산자의 데이터 유형을 일치시키려고 시도합니다.
문자열 연결: 문자열과 다른 데이터 유형을 + 연산자로 결합할 때, JavaScript는 다른 데이터를 문자열로 변환하여 결합합니다.
논리 연산자: 논리 연산자(&&, ||, ! 등)를 사용할 때, 피연산자의 데이터 유형을 일치시키려고 시도합니다.
함수 호출: 함수에 전달되는 인수의 데이터 유형을 함수가 요구하는 데이터 유형과 일치시키려고 시도합니다.

반응형

댓글