자바스크립트 값 변환, Number

개발 및 관리/Javascript 2022. 4. 10. 13:18 posted by HighLighter
반응형

ToNumber : 숫자 아닌 값 -> 수식 연산이 가능한 숫자
1. true는 1, false는 0이 된다. undefined는 NAN으로, null은 0 으로 바뀐다.
2. 문자열 값에 ToNumber를 적용하면 대부분 숫자 리터럴 규칙/구문과 비슷하게 작동한다. 변환이 실패하면 결과는 (숫자 리터럴 구문 에러가 아닌) NaN이다.



var a = {
  valueOf: function() {
    return "42";
  }
};

var b = {
  toString: function() {
    return "42";
  }
};

var c = [4, 2];
c.toString = function() {
  return this.join( "" ); // "42"
};

Number(a);
Number(b);
Number(c);
Number( "" );
Number( [] );
Number( ["abc"] );

Number(true);
Number(false);
Number(undefined);
Number(null);

var a = new Boolean( false);
var b = new Number( 0 );
var c = new String( "" );

var d = Boolean( a && b && c );
var e = a && b && c;

a;
b;
c;
d;
e;

var a = 42;
var b = String(a);
var c = "3.14";
var d = Number(c);

a;
b;
c;
d;

문자열로부터 숫자 값의 파싱은 비 숫자형 문자(Non-Numeric Character)를 허용한다. 즉, 좌->우 방향으로 파싱하다가 숫자 같지 않은 문자를 만나면 즉시 멈춘다. 반면, 강제변환은 비 숫자형 문자를 허용하지 않기 때문에 NaN를 내고 멈춘다.

parseInt()는 문자열에 쓰는 함수이다. 인자가 숫자라면 애초에 parseInt()를 사용할 이유가 없다.

parseInt()은 예측 가능한 일관된 로직을 갖고 있다. 잘 사용하면 의미 있는 결과를 얻겠지만, 이상하게 사용해서 말도 안되는 결과가 나왔다고 자바스크립트를 탓하지 말자. (YOU DON'T KNOW JS, 타입과 문법, 스코프와 클로저, 페이지 110)

var a = "42";
var b = "0";
var c = 42;
var d = 0;

a + b;
c + d;

var a = [1, 2];
var b = [3, 4];
a + b;

반응형