Object.prototype.valueOf()
valueOf()
메서드는 특정 객체의 원시 값을 반환합니다.
시도해보기
구문
object.valueOf();
반환 값
객체의 원시 값.
참고: (단항) 더하기 기호 는 가끔 valueOf
의 단축 표현으로 사용됩니다. 예를 들면, 다음과 같은 표현을 보세요. +new Number()
. 단항 더하기 사용하기.도 참조 하세요.
설명
JavaScript는 객체를 원시 값으로 변환할 때 valueOf
메서드를 호출합니다. 보통 원시 값을 필요로 할 때 알아서 사용하므로 직접 호출해야 하는 경우는 매우 드뭅니다.
기본적으로 Object
의 모든 후손 객체는 valueOf
를 상속받습니다. 내장된 핵심 객체는 모두 valueOf
를 재정의해 적합한 값을 반환합니다. 어떤 객체가 원시 값을 가지고 있지 않다면, valueOf
는 객체 스스로를 반환합니다.
여러분의 코드에서 valueOf
를 호출해 내장 객체를 원시 값으로 변환할 수 있습니다. 사용자 정의 객체를 만들 땐 valueOf
를 재정의해 Object
의 메서드 대신 다른 행동을 부여할 수도 있습니다.
사용자 정의 객체의 valueOf 오버라이딩
기본 valueOf
메서드 대신 사용할 함수를 생성할 수 있습니다. 이 때 함수는 매개변수를 받지 않아야 합니다.
MyNumberType
이라는 객체 형태가 존재하고, 이 객체의 valueOf
메서드를 만들고 싶다고 가정하겠습니다. 다음의 코드는 객체의 valueOf
메서드에 사용자 정의 함수를 할당합니다.
MyNumberType.prototype.valueOf = function () {
return customPrimitiveValue;
};
위의 코드가 활성화된 상태에서 어떤 MyNumberType
객체를 원시 값으로 표현해야 하면 JavaScript가 자동으로 저 함수를 실행합니다.
이 객체의 valueOf
메서드는 보통 JavaScript가 호출하겠지만 다음처럼 직접 호출할 수도 있습니다.
myNumberType.valueOf();
참고: 문자열 문맥에서 객체-문자열 변환은 toString()
메서드를 사용하며, String
객체의 valueOf
를 사용해 원시 문자열로 변환하는 것과는 다릅니다. 모든 객체는, 비록 결과가 "[object type]
" 뿐이라도 문자열 변환 기능을 가지고 있습니다. 그러나 대다수의 객체는 숫자, 불리언, 함수 등으로 변환되지 않습니다.
예제
커스텀 타입에 valueOf 사용하기
function MyNumberType(n) {
this.number = n;
}
MyNumberType.prototype.valueOf = function () {
return this.number;
};
var myObj = new MyNumberType(4);
myObj + 3; // 7
단항 더하기 사용하기
+"5"; // 5 (string to number)
+""; // 0 (string to number)
+"1 + 2"; // NaN (doesn't evaluate)
+new Date(); // same as (new Date()).getTime()
+"foo"; // NaN (string to number)
+{}; // NaN
+[]; // 0 (toString() returns an empty string list)
+[1]; // 1
+[1, 2]; // NaN
+new Set([1]); // NaN
+BigInt(1); // Uncaught TypeError: Cannot convert a BigInt value to a number
+undefined; // NaN
+null; // 0
+true; // 1
+false; // 0
명세
Specification |
---|
ECMAScript Language Specification # sec-object.prototype.valueof |
라우저 호환성
BCD tables only load in the browser