자바스크립트의 모든 값은 타입을 가지는데 개발자가 의도적으로 타입을 변환하는 것
개발자가 의도적으로 값의 타입을 변환되는 것
let x = 10; // number 타입
let str = x.toString(); // string 타입
표현식 평가하는 도중에 JS엔진에 의해 암묵적으로 타입이 변환되는 것
let x = 10; // number 타입
let str = 10 + '' // string 타입
⚠️ 암묵적 타입변환은 개발자의 의도가 들어가지 않은 결과를 초래할 수 있기 때문에
타입 변환이 어떻게 동작하는지 이해 필요함
1 + '2' // '12'
+
연산자는 피연산자 중 하나 이상이 문자열이면 문자열 연결 연산자로 동작
하나의 변수가 number
타입임에도 string
으로 암묵적 타입변환이 일어남
1 - '1' // 0
1 * '10' // 10
1 / 'one' // NaN
'1' > 0 // true
+
를 제외한 산술 연산자, 비교연산자는 숫자 타입이 아닌 피연산자를
숫자타입으로 암묵적 타입 변환이 일어남
⚠️+
가 단항연산자로 사용될 때는 숫자 타입으로 암묵적 타입 변환
+'' // 0
+'1' // 1
+'str' // NaN
+true // 1
+false // 0
+null // 0
+undefined // NaN
+{} // NaN
+[] // 0
+[10, 20] // NaN
JS 엔진은 불리언 타입이 아닌 값을 Truthy
값, Falsy
값으로 구분한다
Falsy
값 모음false
undefined
null
0
-0
NaN
'' // 빈문자열
Truthy
값 : Falsy
값을 제외한 나머지 값'Cat' && 'Dog' // 'Dog'
'Cat' || 'Dog' // 'Cat'
논리연산자는 좌항에서 우항으로 평가가 진행되며
True
값이 결정될 때의 값을 그대로 반환한다
?.
연산자는 좌항의 피연산자가 null
또는 undefined
일 경우
undefined
를 반환하고 그렇지 않으면 우항의 프로퍼티 참조를 이어간다.
let elem = null;
// elem 값이 null이기 때문에 undefined 반환
let value = elem?.value;
console.log(value); // undefined
??
연산자는 좌항의 피연산자가 null
또는 undfined
인 경우
우항의 피연산자를 반환하고 그렇지 않으면 좌항의 피연산자를 반환한다.
➡️ 변수에 기본값을 설정할 때 유용
let foo = null ?? 'default string';
console.log(foo) // "default string"
foo = '' ?? 'default string';
console.log(foo) // "";