Sobes.tech
Junior

Cum are loc conversia unui obiect în șir în limbajul de programare pe care îl folosiți?

sobes.tech AI

Răspuns de la AI

Conversia unui obiect în șir în JavaScript se face în următoarele moduri:

  • Conversie implicită: JavaScript convertește automat un obiect în șir atunci când se folosesc operatori de șir sau în contexte care așteaptă un șir (de exemplu, alert(), interpolare de șiruri cu ghilimele inversate ``). În acest caz, se apelează metoda toString() a obiectului, iar dacă aceasta nu există sau returnează o valoare non-primitivă, se apelează valueOf().

  • Conversie explicită:

    • Metoda toString(): este apelată pentru a obține reprezentarea în șir a obiectului.
    • Funcția String(): convertește explicit valoarea în șir.
    • Operatorul de concatenare cu un șir gol ("" + obiect): inițiază, de asemenea, o conversie implicită.

La convertirea unui obiect în șir, ordinea implicită de apelare a metodelor este: toString() -> valueOf(). Dacă toString() returnează o valoare primitivă, aceasta este utilizată. Dacă nu, sau dacă toString() nu există, se apelează valueOf(). Dacă și valueOf() nu returnează o valoare primitivă, se aruncă o eroare TypeError.

// Obiect cu metode `toString` și `valueOf` personalizate
const myObject = {
  name: 'test',
  value: 123,
  toString: function() {
    return `Object(${this.name})`;
  },
  valueOf: function() {
    return this.value;
  }
};

// Conversie implicită (se apelează `toString`)
console.log(`Obiect ca șir: ${myObject}`); // Va afișa: Obiect ca șir: Object(test)

// Conversie explicită cu String() (se apelează `toString`)
console.log(String(myObject)); // Va afișa: Object(test)

// Conversie cu `toString()`
console.log(myObject.toString()); // Va afișa: Object(test)

// Exemplu în care se apelează `valueOf`
const anotherObject = {
  value: 456,
  valueOf: function() {
    return this.value;
  }
};

console.log(String(anotherObject)); // Va afișa: 456 (deoarece `valueOf` a returnat un primitiv)

// Obiect standard fără metode suprascrise
const standardObject = {};
console.log(String(standardObject)); // Va afișa: [object Object]

Pentru conversia specializată a obiectelor în șir JSON, se folosește JSON.stringify(), care funcționează conform propriilor reguli, ignorând toString() și valueOf() și serializând doar proprietățile enumerate.