1. 문자, 숫자 -> 불리언
// 문자 -> 불린
let x = '';
console.log(Boolean(x)); // false
console.log(typeof x); // string
console.log(typeof Boolean(x)); // boolean
// 숫자 -> 불린
let y = NaN;
console.log(Boolean(y)); // false
console.log(typeof y); // number (NaN의 타입은 스트링이 아니라 넘버..!)
console.log(typeof Boolean(y)); // boolean
// '', 0, NaN == falsy값 => 불리언으로 형 변환 시 false.
낫 어 넘버도 넘버다
2. 산수 연산
console.log(4 + '2'); // 42
산수 연산 중 '더하기'는 숫자와 문자열이 함께 있을 때, '문자열' 기준으로 처리하기 때문에 숫자 4가 문자열이 되어 concat이 이루어진다. (덧셈X)
console.log('4' - true); // 3
더하기를 제외한 나머지 연산들은 숫자로 형을 변환한다.
위 예시에서는 '4'와 true가 모두 숫자 4, 1로 변환되어 결과값으로 3이 나온다.
console.log(4 % 'two'); // NaN
NaN값은 어떤 연산을 해도 NaN이 나온다.
3. 관계 연산
관계연산은 산수연산과 동일하게 모두 '숫자'로 변환하여 계산한다.
console.log('2' < 3); // true
console.log(2 > true); // true
console.log('2' <= false); // false
하지만 문자열이 숫자가 아닌 문자라면, 위에서처럼 NaN이 되어야 할 것 같지만 '관계 연산'에서는 두 값을 비교할 수 없다고 판단한다.
console.log('two' >= 1); // 'two'가 NaN으로 형 변환되기 때문에 NaN >= 1이 됨 => false
따라서 이 경우, 'two'와 1을 비교할 수 없으므로 false가 되는 것이다.
3-1. 동등 비교에 따른 형 변환
console.log(1 == '1'); // true
console.log(1 === '1'); // false
===은 타입까지 비교하기 때문에 더 엄격하게 비교한다고만 알고 있었지,
==가 '형 변환'을 자동으로 수행한다는 건 몰랐다.
== 비교문에서는 '1'이 숫자 1로 형 변환 되었기 때문에 true가 된 것이다.
'JS' 카테고리의 다른 글
| 옵셔널 파라미터? (0) | 2025.03.02 |
|---|---|
| 콘솔 로그 안에서 콘솔 로그를 호출하면? (0) | 2025.03.02 |
| 이중 부정(!!) (0) | 2025.03.01 |
| Three.js + Webpack 프로젝트를 github pages로 배포 후, 이미지 경로 못 찾는 문제 (0) | 2025.02.22 |
| 한글만 두 번씩 입력되는 문제 (IME Composition) (0) | 2025.02.16 |