[모던자바스크립트 딥다이브] 09장 타입 변환과 단축 평가

2023. 7. 25. 22:51스터디/모던자바스크립트딥다이브

타입 변환

  • 자바스크립트 모든 값은 타입이 존재한다.
  • 명시적 타입 변환 : 개발자의 의도에 따라 다른 타입으로 값을 변환하는 것 (= 타입캐스팅)
  • 암묵적 타입 변환 : 자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환 되는 것 (= 타입 강제 변환)
  • 기존 원시 값을 직접 변경하는 것이 아니라 기존 원시 값을 사용해 다른 타입의 새로운 원시 값을 생성하는 것

암묵적 타입 변환

  • 자바스크립트 엔진은 코드의 문맥을 고려해 암묵적으로 데이터 타입을 강제 변환할 때가 있다.
  • 문자열 타입으로 변환
    • 문자열 연결 연산자 '+'
    • 템퍼릿 리터럴
  • 숫자 타입으로 변환
    • 산술 연산자비교
    • 연산자
    • 빈문자열, 빈배열, null, false는 0으로, true는 1로 변환된다.
  • 불리언 타입으로 변환
    • 조건식 : 제어문 또는 삼항조건연산자의 조건식은 불린언으로 평가되어야 하기 때문에 조건식의 값들은 불리언 타입으로 암묵적 형 변환이 이루어진다.
    • Falsy 값
      1. false
      2. undefined
      3. null
      4. 0,-0
      5. NaN
      6. ''

명시적 타입 변환

  • 문자열 타입으로 변환
    1. String(1)
    2. (1).toString()
    3. 1+''
  • 숫자 타입으로 변환
    1. Number('0')
    2. parseInt('0'), parseFloat('10.02')
    3. 단항 산술연산자 사용 +'0'
    4. 산술연산자 사용 '0'*1
  • 불리언 타입으로 변환
    1. Boolean('') // false,
      Boolean('가나다') //true
    2. 부정논리연산자 두번 사용,
      !!'x' // true

단축 평가

  • 표현식을 평가하는 도중에 결과가 확정된 경우 나머지 평가 과정을 생략하는 것을 말한다.
  • 여러 패턴에서 유용하게 사용된다.
  1. if 대체
  2. var done = true var message = '' message = done && '완료' // 완료 var done = false var message = '' message = done || '미완료' // 미완료
  3. 객체를 참조하기전 객체 유무 확인하고 접근하기
  4. var obj = null var value = obj.key1 // 타입 에러 바로 던져버림 ////////////////// var value = obj&&obj.key1 // null로 평가, 따라서 타입에러 안남
  5. 함수 매개변수에 기본값 설정할 때
  6. function test(value) { value = value || '기본값'; // 매개변수가 넘어오지 않으면 '기본값'을 사용한다. }

옵셔녈 체이닝

  • ES11에서 추가됨
  • 좌항의 피연산자가 null이나 undefined로 참조할 수 없을 경우 undefined를 반환하고, 참조 가능할경우 참조를 이어간다.
var obj = null
var value = obj.key1 // 타입 에러 바로 던져버림
///////////////

var obj = null
var value = obj?.obj.key1 // undefiend를 반환함.

null병합 연산자

  • ES11에서 추가됨
  • 좌항이 null이나 undefined일 경우, 우항을 반환, 아니면 좌항을 반환
  • 삼항조건식이랑 비슷해보임
var test = null ?? '테스트테스트'
console.log(test) // 테스트테스트