( 📖 '저자 이웅모 - 모던 자바스크립트 Deep Dive (자바스크립트의 기본 개념과 동작 원리)' 를 읽으며 정리한 내용 입니다. 책의 내용을 포함합니다. 상세한 내용은 책을 구매하여 읽어보시면 최고입니다.👍 )
자바 스크립트의 모든 값은 타입이 있다.
개발자가 의도적 값의 타입을 변환 ⇒ 명시적 타입 변환(explicit coercion), 타입 캐스팅(type casting)
개발자의 의도와 상관없이 표현식을 평가하는 도중에 자바스크립트 엔진에 의해 암묵적인 타입의 변환 ⇒
암묵적 타입 변환(implicit coercion) , 타입 강제 변환(type coercion)
🔑 원시값은 변경 불가능한 값이므로 변경할 수 없다.
타입 변환이 기존 원시값을 직접 변경하는 것은 아니다. 기존 원시값을 이용해 새로운 타입의 새로운 원시값을 생성하는 것이다.
때로는 암묵적 타입 변환이 명시적 타입 변환보다 암묵적 타입 변환이 가독성 측면에서 더 좋을 수 있다. 중요한 것은 코드를 예측할 수 있어야 한다는 것이다. 동료가 작성한 코드를 정확히 이해할 수 있어야하고 자신이 작성한 코드도 동료가 쉽게 이해할 수 있어야 한다.
자바 스크립트 엔진은 표현식을 평가할 때 개발자의 의도와 상관없이 코드이 문맥을 고려해 암묵적으로 데이터 타입을 강제 변환할 때가 있다.
개발자의 의도에 따라 명시적으로 타입을 변경하는 방법은 다양하다.
표준 빌트인 생성자 함수를 new 연산자 없이 호출하는 방법,
빌트인 메서드를 사용하는 방법,
암묵적 타입 변환을 이용하는 방법 등..
String(1); // "1"
String(true); // "true"
(1).toString(); // "1"
(true).toString(); // "true"
1 + " "; // "1"
true + " " ; // "true"
Number("2"); // 2
Number(true); // 1
Number(false); // 0
parseInt("1"); // 1
parseInt("10"); // 10
parseFloat("3.141592"); // 3.141592
+'0'; // 0
+'1'; // 1
+true; // 1
+false; // 0
'0'*1; // 0
'-1'*1; // -1
true*1; // 1
false*1; // 0
Boolean('x'); // true
Boolean(' '); // false
Boolean('false'); // true
Boolean(0); // false
Boolean(1); // true
Boolean(NaN); // false
Boolean(Infinity); // true
Boolean(null); // false
!!'x'; // true
!!' '; // false
!!'false'; // true
!!0; // false
!!1; // true
!!NaN; // false
!!Infinity; // true
!!null; // false
좌항에서 우항으로 평가 진행(→)
// 모두 true 일 때 true 반환 (모두곱)
'cat' && 'dog' ; // 'dog'
'cat' && false ; // false
false && 'dog' ; // false
좌항에서 우항으로 평가 진행(→)
// 둘 중 하나만 true 여도 true 반환 (하나합)
'cat' || 'dog' ; // 'cat'
'cat' || false ; // 'cat'
false || 'dog' ; // 'dog'
논리 연산자를 사용한 단축평가는 if문을 대체 할 수 있다.
if(true){ message = "completed" }
true 일 때 논리곱 연산자 ( message = ture && "completed")
if(!false){ message = "incompleted" }
false 일 때 논리합 연산자 (message = false && "incompleted")
ES11에서 도입된 옵셔널 체이닝(optional chaining) 연산자 ?. 는 좌항의 피연산자가 null 또는 undefined 인 경우 undefined 를 반환하고, 그렇지 않으면 우항의 프로퍼티 참조를 이어간다.
ES11에서 도입된 null 병합(nullish coalescing) 연산자 ?? 는 좌항의 피연산자가 null 또는 undefined 인 경우 우항의 피연산자를 반환하고, 그렇지 않으면 좌항의 피연산자를 반환한다.