Ako sa v jazyku programovania, ktorý používate, vykonáva prevod objektu na reťazec?
sobes.tech AI
Odpoveď od AI
Prevod objektu na reťazec v JavaScripte prebieha nasledovne:
-
Nepriame prevedenie: JavaScript automaticky prevedie objekt na reťazec pri použití reťazcových operátorov alebo v kontextoch, ktoré očakávajú reťazec (napríklad
alert(), interpolácia reťazcov s spätnými apostrofmi ``). V tomto prípade sa volá metódatoString()objektu, a ak nie je alebo vracia neprimitivnu hodnotu, volá savalueOf(). -
Priame prevedenie:
- Metóda
toString(): Volá sa na získanie reťazcového zobrazenia objektu. - Funkcia
String(): Jasne prevedie hodnotu na reťazec. - Operátor konkatenácie s prázdnym reťazcom (
"" + objekt): Taktiež iniciuje nepriame prevedenie.
- Metóda
Pri prevode objektu na reťazec je poradie volaní metód štandardne: toString() -> valueOf(). Ak toString() vracia primitivnu hodnotu, tá sa použije. Ak nie, alebo toString() chýba, volá sa valueOf(). Ak ani valueOf() nevracia primitivnu hodnotu, vyhodí sa chyba TypeError.
// Objekt s vlastnými metódami toString a valueOf
const myObject = {
name: 'test',
value: 123,
toString: function() {
return `Object(${this.name})`;
},
valueOf: function() {
return this.value;
}
};
// Nepriame prevedenie (volá sa toString)
console.log(`Objekt ako reťazec: ${myObject}`); // Vypíše: Objekt ako reťazec: Object(test)
// Priame prevedenie pomocou String() (volá sa toString)
console.log(String(myObject)); // Vypíše: Object(test)
// Priame prevedenie pomocou toString()
console.log(myObject.toString()); // Vypíše: Object(test)
// Príklad, keď sa volá valueOf
const anotherObject = {
value: 456,
valueOf: function() {
return this.value;
}
};
console.log(String(anotherObject)); // Vypíše: 456 (pretože valueOf vrátil primitivnu hodnotu)
// Štandardný objekt bez prepísaných metód
const standardObject = {};
console.log(String(standardObject)); // Vypíše: [object Object]
Pre špeciálne prevedenie objektov na JSON reťazec sa používa JSON.stringify(), ktorý funguje podľa vlastných pravidiel, ignoruje toString() a valueOf() a serializuje iba enumerovateľné vlastnosti.