타입변환

개발자가 의도로 타입을 변환시키는 것을 명시적 타입변환, 타입 캐스팅이라 한다.

개발자의 의도와 상관없이 타입이 변환되는 것을 암묵적 타입변환, 강제 타입변환이라 한다.

명시적 타입 변환도 마찬가지지만, 암묵적 타입 변환이 기존 값(위 예제의 경우, 변수 x의 값)을 직접 변경하는 것은 아니다.

암묵적 불리언타입으로 변화

아래 값들은 제어문의 조건식과 같이 불리언 값으로 평가되어야 할 컨텍스트에서 false로 평가되는 Falsy 값이다.

Falsy 값 이외의 값은 제어문의 조건식과 같이 불리언 값으로 평가되어야 할 컨텍스트에서 모두 true로 평가되는 Truthy 값이다.

function isTruthy(v) {
  return !!v;
}
console.log(isTruthy(true));  //true
console.log(isTruthy('0'));   //true
console.log(isTruthy({}));    //true
console.log(isTruthy([]));    //true

// 질문 숫자타입으로 타입변환 됐을 때({})은 Nan이고, ([])은 0인데 어떻게 값이 true가 나와??
// 그냥 숫자타입 변환 상관없이 위에 있는 Falsy 값만 아니면 true 인가??
// 답변 정확히 말하면 ([]) 가 숫자로 변환되면 0이고 0은 falsy 라서 []는 falsy 아니냐에 답변은
//     전혀 상관이 없음 [] 는 그냥 falsy 변수가아니고 그걸 강제적으로 숫자로 변환시키니까 0이 나왔을 뿐임