일반 자동 형변환 (문자열 -> 숫자)

황제낙엽 2009.06.25 09:27 조회 수 : 124 추천:108

sitelink1  
sitelink2  
sitelink3  
sitelink4  
extra_vars4  
extra_vars5  
extra_vars6  

보통 사칙연산을 할 경우 중간에 데이터가 본의아니게 문자열로 변환 될 경우가 있는데
이때 연산결과가 NaN 이 될 경우가 있다.
이를 위해서 데이터의 형을 유지해 줄 연산이 필요한데
그래서 단순 자연수 연산인 경우에는 parseInt() 를 이용했었다.

함수를 이용하는 방법은 지금까지 써온 일반적인 프로그래밍 습관인데
자바스크립트는 자동 형변환 기능을 이용하여 이를 쉽게 해결 할 수 있다.
 (+this._getValue())  
value가 무엇이 되었든 자동으로 수치형 데이터로 변환해준다.
다만 exception처리가 없음에 주의한다.

참고로 변환 실패시를 대비하여 다음과 같은 함수를 만들어 사용하곤 한다.

·미리보기 | 소스복사·
  1.  /**  
  2.   * string을 int로 변환한다.  
  3.   *  
  4.   * @param {string} value 값  
  5.   * @param {number} def (변환 실패시의 default값)  
  6.   * @return {int} 변환 결과  
  7.   */  
  8.  parseInt: function(/* string */value, def) {   
  9.      if (value) {   
  10.          var rtnValue = parseInt(value);   
  11.          if (isNaN(rtnValue)) {   
  12.             return def;   
  13.          } else {   
  14.             return rtnValue;   
  15.          }   
  16.      } else {   
  17.         return def;   
  18.      }   
  19.  }  

다음과 같이 Integer 여부를 검사하는 유틸도 유용하다.
·미리보기 | 소스복사·
  1. /**  
  2.  * int 여부를 검사한다.  
  3.  *  
  4.  * @param {number} value 값  
  5.  * @return {boolean} int 여부  
  6.  */  
  7. isInt: function(/* number */value) {   
  8.     if (typeof value == "number") {   
  9.         return (value === Math.floor(value));   
  10.     } else {   
  11.         return false;   
  12.     }   
  13. }  

내친김에 나머지 데이터 타입도 검사해보자
·미리보기 | 소스복사·
  1. isNumber: function(v) {   
  2.     return typeof v == "number";   
  3. }   
  4. ,   
  5. isString: function(v) {   
  6.     return typeof v == "string";   
  7. }   
  8. ,   
  9. isUndefined: function(v) {   
  10.     return v === undefined;   
  11. }   
  12. ,   
  13. isArray: function(v) {   
  14.     return v != null && v.constructor == Array;   
  15. }   
  16. ,   
  17. isFunction: function(v) {   
  18.     return typeof v == "function";   
  19. }   
  20. ,   
  21. isObject: function(v) {   
  22.     return v != null && typeof v == "object";   
  23. }  

한가지 parseInt() 함수의 또다른 특징이 있는데,
그것은 입력 데이터를 첫번째부터 순서대로 파싱한다는 것이다.
가령 input = "123", input="123a" 는 동일한 결과로 숫자 "123" 을 리턴한다.
하지만 input = "a123" 은 NaN 을 리턴한다.