암시적 형 변환
의도하지 않았지만 자동으로 변환되는 상황. 산술 연산자에 의해 발생한다.
자동 형 변환이라고 하기도 하고 직역하면 타입 강제 변환(Type Coercion) 이다
예시)
let result = 1 + '2';
console.log(result); // 12
console.log(typeof result);// string
number인 1과 string인 2을 더했는데 string인 12가 되었다.
JS에서 +연산자는 number의 덧셈 연산을 수행할 수도 있지만, 문자열을 결합하는 역할도 있다.
다른 타입의 값을 string과 결합할 경우, string으로 타입이 변환된 후 두 문자열이 결합된다.
다른 산술연산자( -, *, /, % )의 경우에는 반대로 문자열이 숫자로 변환된 후 연산이 수행된다.
console.log('5' - 2); // 3 (문자열 '5'가 숫자 5로 변환됨)
console.log('5' * 2); // 10
console.log('10' / '2'); // 5
console.log('10' % 3); // 1
그 이유는 아마 문자열을 결합하는 + 의 역할과 달리
다른 산술 연산자들은 숫자 계산만을 위한 연산자들이기 때문이 아닐까 싶다
그렇기에 숫자로 이루어진 문자열이 아니면 당연히 NaN이 뜬다(불리언은 0, 1로 바뀌긴함)
추가) 객체형 데이터에 + 연산자가 사용했을경우
let obj = { key: "value" };
console.log(obj + '2'); // "[object Object]2"
let arr = [1, 2, 3];
console.log(arr + '4'); // "1,2,34"
명시적 형 변환
개발자가 의도하여 데이터 타입이 변환시키는 케이스.
각 데이터 타입으로 변환하는 함수가 있다
Boolean()
//false
console.log(Boolean(0));
console.log(Boolean(""));
console.log(Boolean(null));
console.log(Boolean(undefined));
console.log(Boolean(NaN));
//true
console.log(Boolean("false"));
console.log(Boolean({}));
console.log(Boolean([]));
String()
let num = 123;
let str = String(num); // "123"
Number()
let str = "456";
let num = Number(str); // 456
parseInt() 문자열을 정수로
parseFloat() 부동소수점 숫자로
let intVal = parseInt("123.45"); // 123
let floatVal = parseFloat("123.45"); // 123.45