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

황제낙엽 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 을 리턴한다.
번호 제목 글쓴이 날짜 조회 수
97 Iframe 내의 페이지 접근방법 황제낙엽 2009.11.12 59
96 외부 라이브러리 (.js) 의 바람직한 동적 로딩 (The best way to load external JavaScript) 황제낙엽 2009.10.05 124
95 숫자값으로의 변환 형태 황제낙엽 2009.09.02 18
94 Boolean 데이터 타입 황제낙엽 2009.09.02 16
93 toString 변환 테이블 황제낙엽 2009.09.02 13
92 URI 인코딩을 해야 하는 문자들 황제낙엽 2009.09.02 23
91 체인 생성자(생성자 체인), 프로토타입 체인 그리고 생성자 재지정 황제낙엽 2009.08.12 55
90 이미지 로드 코드 황제낙엽 2009.06.27 18
» 자동 형변환 (문자열 -> 숫자) 황제낙엽 2009.06.25 124
88 자바스크립트 쿠키 황제낙엽 2009.06.11 15
87 이클립스에 Aptana 플러그인 설치하기 (자바스크립트 개발에 유용한 IDE) 황제낙엽 2009.04.17 75
86 테이블 엘리먼트 생성 스크립트 황제낙엽 2009.04.07 14
85 MS 익스플로러상에서 문제가 되는 Leak 모델 황제낙엽 2009.04.03 171
84 잘못된 종속관계 해지에 따른 메모리 누수 예제 황제낙엽 2009.04.03 41
83 [펌] TAEYO.NET - Js OOP - 나만의 프레임워크 만들기 황제낙엽 2009.04.02 18
82 [펌] TAEYO.NET - Js OOP - 사용자 정의 객체. 그리고 상속과 재사용 황제낙엽 2009.04.02 16
81 [펌] TAEYO.NET - JavaScript OOP 코어객체와 prototype를 사용한 객체확장 황제낙엽 2009.04.02 21
80 [펌] TAEYO.NET - JavaScript OOP 스트레칭 황제낙엽 2009.04.02 27
79 [펌] 아사페릴의 사생활 - 싱글톤 패턴을 지향한 Javascript Module Pattern 황제낙엽 2009.04.02 90
78 [펌] 아사페릴의 사생활 - Code Conventions for the JavaScript Programming Language 황제낙엽 2009.04.02 194