El mètode valueOf
El mètode valueOf() a JavaScript és un mètode universal present en la majoria dels objectes integrats del llenguatge. El seu propòsit és retornar el valor primitiu de l'objecte sobre el qual s'invoca.
En termes pràctics, s'utilitza principalment quan JavaScript necessita un valor primitiu (com un nombre o una cadena) a partir d'un objecte, per exemple, durant certes operacions de comparació o conversió de tipus.
Funcionament de valueOf() en Tipus Específics
Tot i que tots els objectes tenen el mètode valueOf(), el seu ús és més notable en els tipus que tenen un equivalent primitiu:
1. Objecte String
Retorna la cadena de text primitiva:
let strObjecte = new String("Hola"); // Creació explícita de l'objecte String
let valorPrimitiu = strObjecte.valueOf();
console.log(valorPrimitiu); // Sortida: "Hola"
console.log(typeof valorPrimitiu); // Sortida: "string"
2. Objecte Number
Retorna el valor numèric primitiu:
let numObjecte = new Number(42); // Creació explícita de l'objecte Number
let valorPrimitiu = numObjecte.valueOf();
console.log(valorPrimitiu); // Sortida: 42
console.log(typeof valorPrimitiu); // Sortida: "number"
3. Objecte Date
Retorna el valor primitiu del temps, que és el nombre de mil·lisegons des de l'època UNIX (1 de gener de 1970).
let data = new Date();
let milisegons = data.valueOf();
console.log(milisegons); // Sortida: Un nombre gran (mil·lisegons actuals)
4. Objectes Personalitzats
Es pot sobreescriure el mètode valueOf() en els teus propis objectes per definir com es representen com a valor primitiu:
const punt = {
x: 10,
y: 20,
valueOf: function() {
return this.x + this.y; // El valor primitiu d'un punt és la suma de les seves coordenades
}
};
console.log(punt + 5); // JavaScript crida punt.valueOf() -> 30 + 5
// Sortida: 35
valueOf() vs. toString()
Quan JavaScript necessita convertir un objecte a un primitiu, segueix una jerarquia:
-
Si espera un valor numèric, crida principalment
valueOf(). -
Si espera una cadena de text, crida principalment
toString().
Si el mètode preferit no retorna un primitiu o no està disponible, JavaScript prova l'altre mètode. En molts objectes primitius embolcallats (Number, Boolean), tant valueOf() com toString() retornen resultats que reflecteixen la seva naturalesa.