자바스크립트 엔진이 개발자의 의도와 상관없이 코드 문맥을 파악하여 강제적으로 타입 변환을 실행하는 것을 말한다.
1) 문자열 타입으로 변환
+
연산자는 피연산자 중 하나 이상의 문자가 포함되면 문자열로 타입을 변환한다.
var a = 1 + '2'
console.log(a) // '12'
console.log(typeof a) // string
var b = 0 + ''
console.log(b) // '0'
console.log(typeof b) // string
var c = true + ''
console.log(c) // 'true'
console.log(typeof c) // string
var d = null + ''
console.log(d) // 'null'
console.log(typeof d) // string
var e = ({}) + ''
console.log(e) // [object Object]
console.log(typeof e) // string
2) 숫자 타입으로 변환
+
가 아닌 산술 연산자의 경우 숫자타입이 아닌 피연산자를 암묵적으로 숫자로 변환한다.
console.log(6 - '3') // 3
console.log(6 * '3') // 18
console.log(6 / '3') // 2
console.log(6 / '삼') // NaN
- 크기를 비교하는
>
,<
연산자는 숫자타입이 아닌 피연산자를 암묵적으로 숫자로 변환한다.
console.log('5' > 3) // true
console.log('5' < '3') // false
console.log(3 <= '5') // true
- ’+’ 단항 연산자는 숫자타입이 아닌 피연산자를 암묵적으로 숫자로 변환한다.
console.log(+'5') // 5
console.log(+'') // 0
console.log(+'오') // NaN
console.log(+true) // 1
console.log(+false) // 0
console.log(+null) // 0
console.log(+undefined) // NaN
console.log(+(Symbol())) // TypeError: Cannot convert a Symbol value to a number
console.log(+{}) // NaN
console.log(+[]) // 0
3) 불리언 타입으로 변환
- 자바스크립트 엔진은 제어문의 조건을 불리언 타입으로 암묵적으로 타입변환
- falsy로 평가되는 값 (false, undefined, null, 0, ‘’, NaN)
var a = false
var b = undefined
var c = null
var d = 0
var e = ''
var f = NaN
if(a) console.log('표시안됨')
if(b) console.log('표시안됨')
if(c) console.log('표시안됨')
if(d) console.log('표시안됨')
if(e) console.log('표시안됨')
if(f) console.log('표시안됨')