타입 변환과 값의 불변성

 

  • 원시 값은 불변성의 특징을 가지기 때문에 변수가 가리키는 메모리의 원시 값을 변경하거나 타입을 변경할 수 없습니다. 즉, 타입 변환이란 기존 원시 값을 사용해 다른 타입의 새로운 원시 값을 생성하는 것입니다.




암시적 타입 변환 ( implicit coercion )

 

// 숫자 타입
0 + ""; // "0"
1 + ""; // 1
NaN + ""; // "NaN"

// boolean 타입
true + ""; // "true"
false + ""; // "false"

// null 타입
null + ""; // "null"

// undefined 타입
undefined + ""; // "undefined"

// 객체 타입
({} + ""); // "[object object]"
[10, 20] + ""; // "10, 20"

 

  • 암시적 타입 변환이란 개발자 의도와는 상관없이 자바스크립트 엔진에 의해 값의 타입이 암시적으로 타입이 자동 변환되는 것을 말합니다.




명시적 타입 변환 ( explicit coercion )

 

String(NaN); // "NaN"

(10).toString(); // "10"

Number("0"); // 0

parseInt("12"); // 10

parseFloat("10.53"); // 10.53

Boolean("x"); // true

Boolean(""); // false

 

  • 명시적 타입 변환이란 개발자 의도에 따라 값의 타입이 다른 타입으로 변환하는 것을 말합니다.

  • 명시적 타입 변환 방법은 new를 사용하지 않고 생성자 함수를 호출하거나 빌트인( built-in ) 함수를 이용한 방법이 있습니다.




Truthy / Falsy

 

  • 자바스크립트는 조건식에서 사용하는 Boolean 타입이 아닌 값을 Truthy( 참으로 펴가되는 값 ) 또는 Falsy( 거짓으로 평가되는 값 )으로 구분합니다. 즉, 조건식과 같이 Boolean으로 평가되어야 할 문맥에서 Truthy는 true, Falsy는 false로 암시적 타입 변환됩니다.




Falsy

 

if (false);

if (undefined);

if (null);

if (0 && -0);

if (NaN);

if ("");
  • 위의 값들은 모두 false로 평가되는 값들입니다. 위 값들을 제외하고는 모두 Truthy입니다.




+ Recent posts