개발자가 의도적으로 값의 타입을 변환시키는 것을 명시적 타입 변환, 타입 캐스팅이라고 하고 의도와 상관없이 자바스크립트 엔진에 의해 변환되는 것을 암묵적 타입 변환, 타입 강제 변환이라고 한다.
원시 값은 변경 불가능한 값이기 때문에 타입 변환을 통해 원시 값을 직접 변경하는 것이 아닌 다른 타입의 새로운 원시 값을 생성하는 것이다.
문자열, 숫자, 불리언과 같은 원시 탕비 중 하나로 타입을 자동 변환한다.
+
연산자는 피연산자 중 하나 이상이 문자열이면 문자열 연결 연산자로 동작한다. Number | Boolean | null | undefined | Symbol | Object + ‘’
= String+true // 1
+false // 0
+null // 0
+undefined // NaN
+{} // NaN
+[] // 0
+[10,20,30] // NaN
+(function(){}) // NaN
표준 빌트인 생성자 함수(String, Number, Boolean)를 new 연산자 없이 호출하는 방법, 빌트인 메서드를 사용하는 방법, 암묵적 타입 변환을 이용한다.
🪝 표준 빌트인 생성자 함수: 객체를 생성하기 위한 함수, new 연산자 사용
🪝 표준 빌트인 메서드: 자바스크립트에서 기본 제공하는 빌트인 객체의 메서드
String(1) // "1"
String(Infinity) // "Infinity"
String(true) // "true"
(1).toString() // "1"
(Infinity).toString() // "Infinity"
(true).toString() // "true"
1 + '' // "1"
Infinity + '' // "Infinity"
true + '' // "true"
Number(1) // 1
Number(0.8) // 0.8
Number(true) // 1
parseInt('1') // 1
parseFloat('0.8') // 0.8
parseInt(true) // NaN
단항 산술 연산자를 이용
+'1' // 1
+'0.8' // 0.8
+true // true
산술 연산자를 이용
'1' * 1 // 1
'0.8' * 1 // 0.8
true * 1 // 1
Boolean('a') // true
Boolean('') // false
Boolean(0) // false
Boolean(1) // true
Booelan(null) // false
Boolean(undefined) // false
Boolean({}) // true
Boolean([]) // true
!!'a' // true
!!'' // false
!!0 // false
!!1 // true
!!null // false
!!undefined // false
!!{} // true
!![] // true
'coco' && 'gaori' // "gaori"
false && 'gaori' // false
'gaori' && false // false
2개의 피연산자가 모두 true로 평가될 때 true를 반환하는데 ‘coco’는 Truthy 값이고, ‘gaori’ 또한 Truthy 값이기 때문에 모두 true를 반환한다. 논리곱 연산자는 왼쪽에서 오른쪽으로 평가가 진행되기 때문에 두 번째 피연산자인 ‘gaori’를 반환한다.'coco' || 'gaori' // "coco"
false || 'gaori' // "gaori"
'gaori' || fasle // "gaori"
논리합은 논리곱과 비슷하지만 논리합은 첫 번째 피연산자를 반환하기 때문에 ‘coco’를 반환한다.🪝 옵셔널 체이닝 연산자(?.): Optional chaining: 좌항의 피연산자가 false로 평가되는 Falsy값이라도 null, undefined가 아니라면 우항의 프로퍼티 참조를 이어간다. (null, undefined인 경우 undefined를 반환)
🪝 null 병합 연산자(??): nullish coalescing: 좌항의 피연산자가 null, undefined인 경우 우항의 피연산자를 반환하고 그렇지 않으면 좌항의 피연산자를 반환한다.