[JavaScript] 모던 JS Deep Dive 9장

ubin·2023년 10월 8일

JavaScript

목록 보기
11/21
post-thumbnail

9.1 타입 변환이란?

기존 원시 값을 사용해 다른 타입의 새로운 원시 값을 생성하는 것

  • 명시적 타입 변환 / 타입 캐스팅 : 개발자가 의도적으로 값의 타입을 변환하는 것
  • 암묵적 타입 변환 / 타입 강제 변환 : 개발자의 의도와는 상관없이 표현식을 평가하는 도중에 JS 엔진에 의해 암묵적으로 타입이 자동 변환되는 것
  • 기존 원시 값(immutable value)을 직접 변경할 수 없음
  • 암묵적 타입 변환은 기존 변수 값을 재할당하여 변경하는 것이 아니고 새로 만들어 한 번 사용하고 버림

9.2 암묵적 타입 변환

  • 표현식을 평가할 때 코드의 문맥에 부합하지 않은 상황이 발생할 때 가급적 에러 발생을 줄이기 위해 사용

문자열 타입으로 변환

  • 문자열 연결 연산자의 모든 피연산자를 문자열 타입으로 변환됨
  • 템플릿 리터럴의 표현식 삽입은 표현식의 평과 결과를 문자열 타입으로 변환됨
  • + ‘’ 를 숫자, boolean, null, undefined, Symbol, 객체 타입 뒤에 붙이면 문자열 타입으로 변환됨

숫자 타입으로 변환

  • 산술 연산자와 비교 연산자 사용시 모든 피연산자를 숫자 타입으로 변환됨
  • +단항 연산자 사용시에도 숫자 타입으로 변환
    • 빈 문자열, 빈 배열, null, false는 0으로, true는 1로 변환
    • 객체, 배열, undefined는 NaN
    • Symbol()은 에러
  • 숫자 타입으로 변환할 수 없을 경우 표현식의 평가 결과는 NaN

불리언 타입으로 변환

  • 조건식의 평가 결과를 불리언 타입으로 변환함
  • 불리언 타입이 아닌 값을 Truthy 값 또는 Falsy 값으로 구분함
    • Truthy 값 (참으로 평가되는 값) ⇒ falsy 값 제외한 모든 값
    • Falsy 값 (거짓으로 평가되는 값) ⇒ false undefined null 0 -0 NaN ‘’

9.3 명시적 타입 변환

  • 개발자의 의도에 따라 명시적으로 타입을 변경하는 방법

문자열 타입으로 변환

  1. String 생성자 함수를 new 연산자 없이 호출

    String(숫자 또는 불리언);

  2. Object.prototype.toString() 메서드를 사용

    (숫자 또는 불리언).toString();

  3. 문자열 연결 연산자를 이용

    숫자 또는 불리언 + ‘’;

숫자 타입으로 변환

  1. Number 생성자 함수를 new 연산자 없이 호출

    Number(문자열 또는 불리언);

  2. parseInt(), parseFloat() 함수 사용

    parseInt(문자열만 가능); parseFloat(문자열);

  3. +단항 산술 연산자를 이용

    +문자열 또는 불리언;

  4. *산술 연산자를 이용

    문자열 또는 불리언 * 1;

불리언 타입으로 변환

  1. Boolean 생성자 함수를 new 연산자 없이 호출

    Boolean(문자열, 숫자, null, undefined, 객체);

  2. ! 부정 논리 연산자를 두 번 사용

    !!문자열, 숫자, null, undefined, 객체;

9.4 단축 평가

표현식을 평가하는 도중에 평가 결과가 확정된 경우 나머지 평가 과정을 생략하는 것

논리 연산자를 사용한 단축 평가

논리 연산의 결과를 결정하는 피연산자를 타입 변환하지 않고 그대로 반환

  • 논리합(||) 또는 논리곱(&&) 연산자 표현식은 언제나 2개의 피연산자 중 어느 한쪽으로 평가됨
  • 논리곱 연산자 표현식의 평가 결과는 두 번째 피연산자로 결정함
  • 조건이 Truthy 값일 때 논리곱 연산자 표현식 사용
  • 논리합 연산자 표현식의 평가 결과는 첫 번째 피연산자로 결정됨
  • 조건이 Falsy 값일 때 논리합 연산자 표현식 사용

논리 연산자를 사용한 단축 평가 사용하는 경우

  1. 객체를 가리키기를 기대하는 변수가 null 또는 undefined가 아닌지 확인하고 프로퍼티를 참조할 때
var element = null;
var value = element.value; //TypeError

//단축 평가 사용시 
var element = null; //null 이나 undefined 같은 falsy 값일 시 element로 평가됨 
var value = element && element.value; //TypeError
  1. 함수 매개변수에 기본값을 설정할 때
function getStrLen(str) { //단축 평가로 매개변수의 기본값 설정되어 있음 
	str = str || '';
	return str.length;
}
getStrLen(); //원래는 undefined

⭐️옵셔널 체이닝 연산자

옵셔널 체이닝 연산자 ?.좌항의 피연산자가 null 또는 undefined인 경우 undefined를 반환하고 그렇지 않으면 우항의 프로퍼티 참조하는 것

  • 객체를 가리키기를 기대하는 변수가 null 또는 undefined가 아닌지 확인하고 프로퍼티를 참조할 때 유용함
  • 논리합(&&) 단축 평가 대신에 사용됨
var element = null;
//element가 null 또는 undefined이면 undefined 반환하고 아니면 우항의 프로퍼티 참조
var value = element**?.**value; 
console.log(value); //element가 null이므로 undefined 반환 

⭐️null 병합 연산자

null 병합 연산자 ??좌항의 피연산자가 null 또는 undefined인 경우 우항의 피연산자를 반환하고, 그렇지 않으면 좌항의 피연산자를 반환하는 것

  • 변수에 기본값을 설정할 때 유용함
  • 논리곱(||) 단축 평가 대신에 사용됨
var foo = null ?? 'default string';
console.log(foo); //좌항이 null이므로 우항 'default string' 반환
profile
프론트엔드 개발자가 되고싶은 코린이⌨️

0개의 댓글