[모던자바스크립트] 9. 타입변환과 단축평가

이아현·2023년 7월 31일
0
post-thumbnail

1. 타입변환

  • 값의 타입은 개발자의 의도에 따라 다른 타입으로 변환될 수 있음
  • 명시적 타입 변환 / 타입 캐스팅 : 개발자가 의도적으로 값의 타입을 변환하는 것
  • 암묵적 타입 변환 / 타입 강제 변환 : 자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환
  • 타입 변환 : 기존 원시 값을 이용해 다른 타입의 새로운 원시 값을 생성하는 것
  • 자바스크립트 엔진에 의해 암묵적으로 드러나지 않게 타입이 변경되기 때문에 타입 변환된 값으로 표현식이 어떻게 평가될 것인지 예측해야한다.
  • 만약 타입 변환 결과를 예측하지 못하거나 예측이 결과와 일치하지 않는다면 오류 생성 가능성이 높음

2. 암묵적 타입 변환

2-1. 문자열 타입으로 변환

  • 자바스크립트 엔진은 문자열 연결 연산자 표현식을 평가하기 위해 문자열 연결 연산자의 피연산자 중에서 문자열 타입이 아닌 피연산자를 문자열 타입으로 암묵적 타입 변환한다.
    `1 + 1 = ${1 + 1}` // "1 + 1 = 2"

2-2. 숫자 타입으로 변환

  • 산술 연산자의 피연산자 중에서 숫자 타입이 아닌 피연산자를 숫자 타입으로 암묵적 타입 변환한다.
  • 비교 연산자의 피연산자 중에서 숫자 타입이 아닌 피연산자를 숫자 타입으로 암묵적 타입 변환한다.
  • 0 : '', [], null, false
  • 1 : true
  • NaN : 객체, 빈 배열이 아닌 배열, undefined

2-3. 불리언 타입으로 변환

  • 자바스크립트 엔진은 불리언 타입이 아닌 값은 Truthy(참으로 평가되는 값) 또는 Falsy(거짓으로 평가되는 값)으로 구분
  • Falsy
    • false
    • undefined
    • null
    • 0, -0
    • NaN
    • ''
  • Falsy이외의 값은 모두 true로 평가되는 Truthy값이다.

3. 명시적 타입 변환

3-1. 문자열 타입으로 변환

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

  2. Object.prototype.toString메서드를 사용하는 방법

  3. 문자열 연결 연산자 (+)를 이용하는 방법

    // 1
    String(1);    // "1"
    String(NaN);  // "NaN"
    
    // 2
    (1).toString();   // "1"
    (NaN).toString(); // "NaN"
    
    // 3
    1 + '';    // "1"
    NaN + '';  //"NaN"

3-2. 숫자 타입으로 변환

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

  2. parseInt, parseFloat함수를 사용하는 방법(문자열만 숫자 타입으로 변경 가능)

  3. +단항 산술 연산자를 사용하는 방법

  4. *산술 연산자를 사용하는 방법

    // 1. 
    Number('0'); // 0
    Number('-1'); // -1
    Number('10.53'); // 10.53
    Number(true); // 1
    Number(false); // 0
    
    // 2. 
    parseInt('0'); // 0
    parseInt('-1'); // -1
    parseInt('10.53'); // 10.53
    
    // 3.
    +'0'; // 0
    +'-1'; // -1
    +true; // 1
    +false; // 0
    
    // 4. 
    '0'*1; // 0
    '-1'*1; // -1
    '10.53'*1; // 10.53
    true * 1; // 1
    flase * 1; // 0

3-3. 불리언 타입으로 변환

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

  2. ! 부정 논리 연산자를 두 번 사용하는 방법

    // 1.
    // 문자열 => 불리언
    Boolean('x'); // true
    Boolean(''); // false
    Boolean('false'); // true
    // 숫자 => 불리언
    Boolean(0); // false
    Boolean(1); // true
    Boolean(NaN); // false
    Boolean(Infinity); // true
    // null => 불리언
    Boolean(null); // false
    // undefined => 불리언
    Boolean(undefined); // false
    // 객체 => 불리언
    Boolean([]); // true
    Boolean({}); // true
    
    // 2.
    // 문자열 => 불리언
    !!'x'; // true
    !!''; // false
    !!'false'; // true
    // 숫자 => 불리언
    !!0; // false
    !!1; // true
    !!NaN; // false
    !!Infinity; // true
    // null => 불리언
    !!null; // false
    // undefined => 불리언
    !!undefined; // false
    // 객체 => 불리언
    !![]; // true
    !!{}; // true    

4. 단축 평가

4-1. 논리 연산자를 사용한 단축 평가

  • 논리합(||) 또는 논리곱(&&) 연산자 표현식의 평가 결과는 불리언 값이 아닐 수 있다.
    'cat' && 'dog'; // 'dog'
  • 논리곱(&&) 연산자
    • 논리 연산의 결과를 결정하는 두 번째 피연산자를 그대로 반환
  • 논리합(||) 연산자
    • 논리 연산의 결과를 결정하는 첫 번째 피연산자를 그대로 반환
  • 단축 평가
    • 표현식을 평가하는 도중에 평가 결과가 확정된 경우 나머지 평가 과정을 생략
    • 객체를 가리키기를 기대하는 변수가 null또는 undefined가 아닌지 확인하고 프로퍼티를 참조할 때
      var elem = null;
       var value = elem && elem.value; // null
    • 함수 매개변수에 기본값을 설정할 때
      • 인수를 전달하지 않으면 매개변수에는 undefined가 할당된다.

      • 단축 평가를 이용해서 매개변수의 기본값을 설정하면 undefined로 인해 발생할 수 있는 에러 방지

        function getStringLength(str) {
          str = str || '';
          return str.length;
        }
        
        getStringLength();     // 0
        getStringLength('hi'); // 2
        				```

4-2. 옵셔널 체이닝 연산자

  • ?. 좌항의 피연산자가 null혹은 undefined인 경우 undefined를 반환
  • 그렇지 않으면 우항의 프로퍼티를 참조
  • 변수가 null 또는 undefined가 아닌지 확인하고 프로퍼티를 참조할 때 유용
    var elem = null;
    var value = elem?.value; 
    console.log(value); // undefined

4-3. null 병합 연산자

  • ?? 좌항의 피연산자가 null 또는 undefined인 경우 우항의 피연산자를 반환
  • 그렇지 않으면 좌항의 피연산자를 반환
  • 변수에 기본값을 설정할 때 유용
    var foo = null ?? "default string";
    console.log(foo); // "default string";
profile
PM을 지향하는 FE 개발자 이아현입니다 :)

0개의 댓글