타입변환과 단축평가
let x = 10
let str = x.toString();
console.log(typeof str, str) // string 10
console.log(typeof x,x) // number 10
변수 값이 바뀐것은 아님
let str = x + '';
console.log(typeof str, str으로 이 되어 버림)
원시값은 변경 불가능한 값 (immutable value) 이므로 변경할 수 없다.
타입변환은 기존의 원시값을 사용해 다른 타입의 새로운 원시값을 생성하는 것!
명시적 타입변환은 타입변경의 개발자의지가 코드에 드러나지만, 암묵적 강제변환은 자바스크립트 엔진에 의해 암묵적으로 자동변환되기때문에 개발자의 의도가 크게 드러나지 않는다
똑똑한 자바스크립트? 는 에러를 발생시키지 않기 위해 에러를 발생시킨다.
제어문의 boolean타입으로 평가되어야할 문맥에서 false로 평가되는 falsy값은
true로 평가되는 truthy 값은
Number()는 문자열 && boolean타입을 다 숫자타입으로 변환가능하고, parseInt/parseFloat은 문자열만 변환 가능함
+단항 연산자와 산술연산자 이용
표현식 평가 도중에 결과가 확정되면 피연산자를 그대로 반환한다.
자주 사용하는 아래와 같은 느낌
//elem이 null이나 undefined면 elem으로 평가, 값이 있으면 elem.value로 평가
let value = elem && elem.value
3. 옵셔널 체이닝 연산자 (?.)
es11에 도입된 문법
좌항의 피연산자가 null or undefined면 null or undefined 를 아닌경우에는 우항의 property를 참조한다
좌항이 false일 경우 (false, undefined, null, 0, NaN, '') 일경우 좌항 연산자를 그대로 반환하는데, 가끔 0 혹은 ""이 객체로 평가되면 올바르게 작동하지 않을수 있다.(원시값과 레퍼객체) 그래서 ?. 를 사용하는 방법이 더 정확할 수 있다.
4. null 병합 연산자 (nullish coalescing)연산자 ??