자바스크립트에서 더하기를 처리하는 방법에 대한 이야기입니다.
http://www.2ality.com/2012/01/object-plus-object.html 문서의 일부를 참고했습니다.
자바스크립트 두 종류의 값
1) 기본형(primitives) : undefined, null, true/false, 숫자, 문자
2) 객체(objects) : objects, arrays, functions
더하기 실행시 세 종류의 값 변환
1) 기본형
2) 숫자
3) 문자열
1) 기본형으로 변환되는 경우
내부적으로 실행되는 함수
ToPrimitive(input, PreferredType?)
1. input이 기본형인 경우, 그대로 반환
2. 다른 경우 input은 객체. obj.valueOf() 호출.
결과가 기본형이면 그것 반환
3. 아닌 경우, obj.toString() 호출.
결과가 기본형이면 그것 반환
4. 이것도 아니면, TypeError 던짐
참고 ECMAScript5.1 섹션9.1
2) 숫자로 변환되는 경우
내부 호출 함수 ToNumber()
1. 인자가 undefined 이면 NaN 반환
2. 인자가 null 이면 +0 반환
3. true는 1, false는 +0
4. 문자열은 문자열에 포함된 숫자를 변환
"324"라면 324
5. 객체라면 ToPrimitive(obj, Number) 호출해서
숫자로 가져온 값에 ToNumber() 적용
참고 ECMAScript5.1 섹션9.3
3) 문자열로 변환하는 경우
내부 호출 함수 ToString()
1. 인자가 undefined 이면 "undefined" 반환
2. 인자가 null 이면 "null" 반환
3. true는 "true", false는 "false" 각각 반환
4. 숫자는 문자열로, 예 "1.765"
5. 문자는 그대로 반환
6. 객체는 ToPrimitive(obj, String) 호출해서
숫자로 가져온 값에 ToString() 적용
참고 ECMAScript5.1 섹션9.8
검증하기 위한 객체입니다.
var obj = { valueOf: function () { console.log("valueOf"); return {}; // not a primitive }, toString: function () { console.log("toString"); return {}; // not a primitive } }
code from: http://www.2ality.com/2012/01/object-plus-object.html
그리고 재밌는 더하기의 경우입니다.