본문 바로가기

TIL

모던 자바스크립트 Deep Dive 9장 타입 변환과 단축 평가

 9.1 타입 변환 

명시적 타입 변환 VS  암묵적 타입 변환 

개발자가 의도적으로 값의 타입을 변환하는 것을 명시적 타입 변환, 자바스크립트 엔진에 의해 변하는 것을 암묵적 타입 변환이라고 한다. 

 

이때 암묵적 타입 변환은 새로운 타입의 값을 만들어 단 한 번 사용하고 버린다. 

 

타입 변환을 알아야 하는 이유 => 결과를 예측할 수 있어야 오류를 생산할 가능성이 줄이들기 때문에.  

항상 명시적 타입 변환이 좋은 것은 아니다. 자바스크립트를 잘 이해하고 있는 개발자는 암묵적 타입 변환이 더 가독성이 좋을 수도 있기 때문이다. 중요한 것은 코드를 예측할 수 있어야 한다는 것! 

 


9. 2 암묵적 타입 변환 

9.2.1 문자열 타입으로 변환

- 자바스크립트 엔진은 문자열 연결 연산자 표현식을 평가하기 위해 피연산자 중에서 문자열 타입이 아닌 것을 문자열 타입으로 암묵적 타입 변환한다. 

 

9.2.2 숫자열 타입으로 변환 

- / * 등 산술 연산자에서 피 연산자를 숫자 타입으로 변환

숫자 타입으로 변환할 수 없는 'one'같은 경우 표현식의 결과는 NaN이 된다. 

 

비교 연산자는 크기를 비교하므로 피 연산자는 모두 숫자 타입이여야 한다. 

 

+ 단항 연산자는 피연산자가 숫자 타입이 아니면 암묵적으로 타입 변환한다. 

 

+' ' // 0
+'0' //0
+'1' //1
+'string' //NaN

9.2.3 불리언 타입으로 변환

제어문, 상항 조건 연산자의 조건식은 불리언 값이어야 하므로 암묵적 타입 변환한다. 

 

9.4 단축 평가 ( 이 부분이 난이도가 있다)_

논리곱(&&) 논리합(||) 연산자는 피 연산자를 타입 변환하지 않고 그대로 반환하는데 이를 단축 평가라고 한다. 

 

단축 평가가 유용한 상황 2가지 

1) 객체를 가리키기를 기대하는 변수가 null 또는 undefined가 아닌지 확인하고 프로퍼티를 참조할 때. 

let elem = null ; 
let value = elem.value // 에러발생 
let value = elem && elem.value;; // null

2) 함수 매개변수에 기본값을 설정할 때 

 

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

이런 경우에 유용하다. 

하지만 ES6에서는 파라미터의 기본값을 설정할 수 있는 문법이 추가됨

 

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

위와 같다. 

 

9.4.2 옵셔널 체이닝 연산자 

좌항의 피 연산자가 null또는 undefined라면 undefined를 반환하고 그렇지 않으면 우항의 프로퍼티 참조를 이어간다. 주의 할 점은 false값이 아니라 null과 undefined라는 점. 

let elem = null; 
let value = elem?.value;
console.log(value); // undefined

 

9.4.3 null 병합 연산자 

??는 좌항의 피연산자가 null또는 undefined인 경우에 우항의 피 연산자를 반환하고 ㄱ렇지 않으면 좌항의 피 연산자를 반환한다. 

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

널 병합 연산자는 기본값을 설정할 때 유용하다. 할 점은 false값이 아니라 null과 undefined라는 점.