[DeepDiveJS] 09장 타입 변환과 단축 평가

소히·2022년 10월 25일
0

DeepDiveJS

목록 보기
7/11

자바스크립트의 모든 값은 타입이 있다.

  • 개발자의 의도에 따라 다른 타입으로 변환이 가능 -> 명시적 타입 변환, 타입 캐스팅
let x = 10;
let str = x.toString(); // 명시적 타입 변환, 숫자를 문자열로 타입 캐스팅

console.log(typeof str, str); // string 10
console.log(typeof x, x); // number 10
  • 개발자의 의도와 상관 없이 자바스크립트 엔진에 의해 암묵적으로 타입이 변환 ->
    암묵적 타입 변환, 타입 강제 변환
let x = 10;
let str = x + ''; // 암묵적 타입 변환

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

❗️ 명시적 타입 변환과 암묵적 타입 변환의 큰 차이는 개발자가 의도를 했느냐이다. 타입 변환 결과를 예측하지 못하거나 결과가 다르다면 오류가 생길 가능성이 높아진다.

(10).toString()보다는 10 + '' 이 더욱 간결하고 이해하기 쉽다.

명시적 타입 변환

  1. 표준 빌트인 생성자 함수(String Number Boolean)사용 하는 방법
  2. 암묵적 타입 변환을 이용하는 방법

🪝 문자열 타입으로 변환

  • String 생성자 함수 사용
  • toString 메서드 사용
  • 문자열 연결 연산자 사용 ( 1 + '' )

🪝 숫자 타입으로 변환

  • Number 생성자 함수 사용
  • parseInt, parseFloat 함수 사용(문자열만 숫자 타입으로 변환 가능)
  • + 단항 산술 연산자를 이용하는 방법
  • * 산술 연산자를 이용하는 방법

🪝 불리언 타입으로 변환

  • Boolean 생성자 함수 사용
  • ! 부정 논리 연산자를 두 번 사용하는 방법

단축 평가

💡 논리곱 연산자

'Cat' && 'Dog' // -> "Dog", 

논리곱 연산자는 논리 연산의 결과를 결정하는 두 번째 피연산자, 즉 문자열 'Dog'를 그대로 반환한다.

💡 논리합 연산자

'Cat' || 'Dog' // -> "Cat", 

논리합 연산자는 논리 연산의 결과를 결정하는 첫 번째 피연산자, 즉 문자열 'Cat'를 그대로 반환한다.

위 두 연산자는 논리 연산의 결과를 결정하는 피연산자를 타입 변환하지 않고 그대로 반환한다. 단축평가는 표현식을 평가하는 도중에 평가 결과가 확정된 경우 나머지 평가 과정을 생략하는 것을 말한다.

단축 평가를 사용하면 if문을 대체할 수 있다.

let done = true;
let message = '';

if (done) message = '완료';

message = done && '완료'; // done이 true라면 message에 '완료'를 할당
console.log(message); // 완료

💊 단축 평가는 하기와 같은 상황에서 유용하게 사용된다.

  • 객체를 가리키기를 기대하는 변수가 null 또는 undefined가 아닌지 확인하고 프로퍼티를 참조할 때
  • 함수 매개변수에 기본값을 설정할 때
    +함수를 호출 할 때 인수를 전달하지 않으면 매개변수에는 undefined가 할당되는데 그 에러를 방지할 수 있다.
function getStringLength(str = '') {
  return str.length;
}

getStringLength();    // -> 0
getStringLength('hi') // -> 2

옵셔널 체인징 연산자 📎

개인적으로 많이 사용하는 연산자이다..!!

?. 는 좌항의 피연산자가 null 또는 undefined인 경우 undefined를 반환하고, 그렇지 않으면 우항의 프로퍼티 참조를 이어간다.

null 병합 연산자 🖇

연산자 ?? 는 좌항의 피연산자가 null 또는 undefined인 경우 우항의 피연산자를 반환하고, 그렇지 않으면 좌항의 프로퍼티 참조를 이어간다. 변수에 기본값을 설정할 때 유용하다.

let foo = null ?? 'default string';
console.log(foo); // "default string"

let fooo = '' ?? 'default string';
console.log(fooo); // ""

0개의 댓글