자바스크립트의 암묵적 타입 변환(implicit coercion)은 간단하게 말하자면 예상치 못한 타입을 받았을 때 예상 가능한 타입으로 바꿔준다고 생각하면 된다. 그로 인해 사용자는 숫자 값을 넘겨야 하는 곳에 문자열을 넣을 수도 있고 문자열을 넣어야 하는 곳에 객체를 넘길 수도 있다. 이러한 일이 발생했을 때 자바스크립트 엔진은 사용자가 잘못 넣은 타입을 올바른 타입으로 변환하려고 시도한다. 이것은 자바스크립트의 주요한 기능 중 하나이며 가장 피해야할 기능이다.
숫자 표현식에서 숫자가 아닌 값
문자열
사용자가 숫자 표현식에서 문자열 (-, *, /, %을 포함한 문자열)을 피연산자로 넘겼을 때마다 숫자의 암묵적 타입변환 프로세스는 문자열을 인자로 자바스크립트 내부에 내장된 Number함수를 불러오는 것과 비슷하다.
숫자 + 문자 를 가졌다면 어떤 문자열이라도 숫자로 바뀐다. 하지만 만일 문자열에 숫자가 아닌 것이 포함되어 있으면 NaN을 리턴하게 된다.
+연산자
+연산자는 다른 연산자들과는 다르게 2가지 기능을 한다.
1. 수학적인 덧셈
2. 문자열 합치기
문자열이 + 연산자의 피연산자로 주어졌을 때, 자바스크립트는 문자열을 숫자로 바꾸려 하지않고 숫자를 문자로 바꾸려한다.
객체
자바스크립트에서 객체의 대부분의 암묵적 형변환은 결과 값으로 [object object]를 반환한다.
모든 자바스크립트 객체는 toString메소드를 상속받는다. 상속받은 toString메소드는 객체가 문자열 타입으로 변해야 할 때 마다 쓰인다.
객체가 수학적 표현식 사이에 들어갔을 때는, 자바스크립트는 반환 값을 숫자로 변환하려 한다.
배열 객체
배열에서 상속된 toString메소드는 약간 다르게 동작한다. 배열에서 아무런 인자도 넣지 않은 join메소드를 호출하는 것과 비슷한 방식으로 작동하게 된다.
True, False 그리고 ""
Falsy 와 Truthy
자바스크립트 값은 true 나 false 로 변환될 수 있는 특징을 가지고 있다. true로 형변환을 강제하는 것을 truthy라고 한다. 또 false로 형변환을 강제하는 것을 falsy라고 한다.
자바스크립트에서 변환 시에 falsy로 취급되는 값들이다.
1. false
2. 0
3. null
4. undefined
5. ""
6. NaN
7. -0
이 외에는 전부 truthy로 취급된다.
NaN
NaN은 자기 자신과도 같지 않은 특별한 숫자 값이다.
참고 및 출처
'JavaScript' 카테고리의 다른 글
자바스크립트 개발자가 알아야할 33가지 개념[#06. 함수 범위(Function Scope), 블럭 범위(Block Scope), 렉시컬(lexical) 범위] (0) | 2022.05.11 |
---|---|
자바스크립트 개발자가 알아야할 33가지 개념(#05. == vs === and Typeof) (0) | 2022.05.10 |
자바스크립트 개발자가 알아야할 33가지 개념(#03. 값(value) vs 참조(reference)) (0) | 2022.05.09 |
자바스크립트 개발자가 알아야할 33가지 개념(#02. Primitive Type) (0) | 2022.05.08 |
자바스크립트 개발자가 알아야할 33가지 개념(#01. 콜스택) (0) | 2022.05.07 |
댓글