명시적 형변환 방법은 다른 문제에서 여러번 사용해 익숙했고, 직관적이라 어렵지 않았는데,
암시적 형변환을 사용한 코드를 보니 자세한 개념 숙지가 안되었던 것 같아 글을 쓴다.
< +연산자에 의한 암시적 형변환 >
서로 다른 자료형을 가지는 변수를 +연산자로 연결했을 때,
JS엔진은 Boolean < Number < String 의 우선 순위에 기반해 암시적 형변환을 한다.
// 우선순위에 의한 형변환
Number + Boolean // Number
Number + String // String
Boolean + String // String
// 실제 String을 만나기 전까지는 일반적인 + 연산자로 동작한다.
7 + 7 + 7; // = 21
7 + 7 + "7"; // = 147
"7" + 7 + 7; // = 777
< -, *, /, %에 의한 암시적 형변환 >
+ 이외의 산술 연산자( -, *, /, % )는 두 변수를 모두 Number형으로 변환하고 계산을 수행한다.
// * 외에 모든 다른 연산자(-,/,%)도 동일하게 작동한다.
String * Number // Number
String * String // Number
Number * Number // Number
String * Boolean // Number
Number * Boolean // Number
“1031” * false; // 0
1031 * true; // 1031
< 이중 부정(!!)에 의한 암시적 형변환 >
JS엔진은 변수 앞에 이중 부정연산자( !! )를 마주하면 해당 변수를 Boolean형으로 강제 변환한다.
false로 여겨지는 값 : 0인 숫자, null, undefined, NaN, 빈 문자열, 빈 객체
true로 여겨지는 값 : false로 여겨지는 값 외의 모든 값
function check(variable) {
if (!!variable) {
console.log(variable);
} else {
console.log('잘못된 값');
}
}
check(null); // 잘못된 값
check(3.14); // 3.14
check(undefined); // 잘못된 값
check(0); // 잘못된 값
check('Good'); // Good
check(''); // 잘못된 값
check(NaN); // 잘못된 값
check(5); // 5