타입변환과 단축평가

let x = 10
let str = x.toString();
console.log(typeof str, str) // string 10 
console.log(typeof x,x) // number 10

변수 값이 바뀐것은 아님

암묵적 타입 변환 (implicit coercion) or 타입 강제 변환(type coercion)

let str = x + ''; 
console.log(typeof str, str으로 이 되어 버림)

원시값은 변경 불가능한 값 (immutable value) 이므로 변경할 수 없다.
타입변환은 기존의 원시값을 사용해 다른 타입의 새로운 원시값을 생성하는 것!

명시적 타입변환은 타입변경의 개발자의지가 코드에 드러나지만, 암묵적 강제변환은 자바스크립트 엔진에 의해 암묵적으로 자동변환되기때문에 개발자의 의도가 크게 드러나지 않는다

암묵적 타입변환의 예시

똑똑한 자바스크립트? 는 에러를 발생시키지 않기 위해 에러를 발생시킨다.

  1. +연산자
    문자열 연결 연산자는 피연산자를 문자열 타입으로 암묵적 타입변환 한다.

  1. 산술연산자 (-.*,/,>)
  • 산술연산자는 숫자값을 만드므로 피연산자를 숫자타입으로 암묵적 변환한다.
  • +는 단항연산자로 사용되었을때만 숫자타입으로 변환한다
  • 빈 문자열(''), 빈배열([]), null, false는 0으로, true는 1로 변환된다. 객체와 빈배열이 아닌배열 undefined는 변환되지않아 NaN이 된다.
  1. boolean타입
  • 제어문의 boolean타입으로 평가되어야할 문맥에서 false로 평가되는 falsy값은

    • false
    • undefined
    • null
    • 0, -0
    • NaN
    • ''
  • true로 평가되는 truthy 값은

    • true
    • '0'
    • {}
    • []

명시적 타입변환의 예시

  1. string 문자열 타입 으로 변환

  1. number 숫자타입으로 변환
  • Number()는 문자열 && boolean타입을 다 숫자타입으로 변환가능하고, parseInt/parseFloat은 문자열만 변환 가능함

  • +단항 연산자와 산술연산자 이용

  1. boolean 타입으로 변환
    - 빈배열, 0, NaN, null, undefined 는 false이다

단축 평가 (short circuit evalutation)

  1. 논리합 (||) 논리곱(&&) 연산자

표현식 평가 도중에 결과가 확정되면 피연산자를 그대로 반환한다.

자주 사용하는 아래와 같은 느낌

//elem이 null이나 undefined면 elem으로 평가, 값이 있으면 elem.value로 평가 
let value = elem && elem.value 
  1. 매개변수에 기본값 설정 하면 undefined 에러를 막을 수 있다.

3. 옵셔널 체이닝 연산자 (?.)

  • es11에 도입된 문법

  • 좌항의 피연산자가 null or undefined면 null or undefined 를 아닌경우에는 우항의 property를 참조한다

  • 좌항이 false일 경우 (false, undefined, null, 0, NaN, '') 일경우 좌항 연산자를 그대로 반환하는데, 가끔 0 혹은 ""이 객체로 평가되면 올바르게 작동하지 않을수 있다.(원시값과 레퍼객체) 그래서 ?. 를 사용하는 방법이 더 정확할 수 있다.

4. null 병합 연산자 (nullish coalescing)연산자 ??

  • 좌항의 연산자가 null or undefined 일 경우 우항을 반환한다.

profile
코린이 프론트엔드 개발자💻💛🤙🏼

0개의 댓글