util.inspect / util.format în Node.js

Criptografie și utilitare Node.js 0.3; util.isDeepStrictEqual din 9.0

Transformă orice valoare în text lizibil, ca console.log (inspect), și formatează șiruri cu %s, %d, %o (format).

Sintaxă
import { inspect, format, isDeepStrictEqual } from "node:util";
inspect(obiect, { depth, compact, breakLength, sorted })
format("%s are %d ani", nume, varsta)

Ce face util.inspect / util.format

console.log afișează obiectele folosind util.inspect. Apelat direct, inspect îți dă acel text, pe care îl poți salva sau trimite în jurnale. Opțiunea depth spune câte niveluri afișează (implicit 2; mai adânc apare [Object]); depth: null le afișează pe toate. sorted: true sortează cheile, breakLength decide când se trece pe rânduri noi.

util.format construiește un șir ca printf: %s pentru șir, %d pentru număr, %i pentru întreg, %j pentru JSON, %o pentru obiect. Este ce face și console.log("%s are %d ani", ...).

O clasă poate decide cum este afișată definind metoda [inspect.custom] (util pentru a ascunde parole). util.isDeepStrictEqual(a, b) compară profund două valori, fără să arunce erori ca assert.

Parametri

Parametru Descriere
depth Câte niveluri de obiecte imbricate (implicit 2).
compact Câte elemente interioare pe un rând; false pune fiecare proprietate pe rândul ei.
breakLength Lungimea după care se trece pe rând nou (implicit 80).
sorted Sortează cheile obiectelor.
colors Adaugă culori ANSI.

Ce returnează

Un șir.

Exemple

Exemplul 1: Obiecte adânci: depth

import { inspect } from "node:util";

const comanda = { id: 1024, client: { nume: "Ana", adresa: { oras: "Iași", strada: { nume: "Lăpușneanu", nr: 12 } } } };

console.log(comanda);
console.log(inspect(comanda, { depth: null, compact: false }));

Rezultat

{
  id: 1024,
  client: { nume: 'Ana', adresa: { oras: 'Iași', strada: [Object] } }
}
{
  id: 1024,
  client: {
    nume: 'Ana',
    adresa: {
      oras: 'Iași',
      strada: {
        nume: 'Lăpușneanu',
        nr: 12
      }
    }
  }
}

Exemplul 2: util.format și isDeepStrictEqual

import { format, isDeepStrictEqual } from "node:util";

console.log(format("%s are %d ani și media %d", "Ana", 25, 9.5));
console.log(format("Comanda: %j", { id: 7, total: 120 }));
console.log(format("%s din %s", "Ion"));

console.log(isDeepStrictEqual({ note: [9, 10] }, { note: [9, 10] }));
console.log(isDeepStrictEqual({ nota: 9 }, { nota: "9" }));

Rezultat

Ana are 25 ani și media 9.5
Comanda: {"id":7,"total":120}
Ion din %s
true
false

Exemplul 3: Afișare personalizată cu inspect.custom

Parola nu apare niciodată în console.log sau în jurnale.

import { inspect } from "node:util";

class Utilizator {
  constructor(email, parola) {
    this.email = email;
    this.parola = parola;
  }
  [inspect.custom]() {
    return `Utilizator<${this.email}>`;
  }
}

const u = new Utilizator("ana@exemplu.ro", "Iasi2026!");
console.log(u);
console.log({ autor: u });

Rezultat

Utilizator<ana@exemplu.ro>
{ autor: Utilizator<ana@exemplu.ro> }

Greșeli frecvente

  • Folosești JSON.stringify ca să depanezi obiecte: nu afișează undefined, Map, Set sau referințe circulare (dă eroare). inspect le afișează pe toate.
  • Vezi [Object] în jurnal și crezi că datele lipsesc: este doar limita depth. Folosește inspect(x, { depth: null }) sau console.dir(x, { depth: null }).
  • Te bazezi pe formatul exact al lui inspect în teste sau fișiere: se poate schimba între versiuni. Pentru date folosește JSON.stringify.

Comenzi înrudite

  • util.styleText: Colorează și formatează textul afișat în terminal (roșu, verde, bold, subliniat) fără pachete ca chalk.
  • assert (node:assert/strict): Verificări care aruncă o eroare dacă o condiție nu este adevărată: baza testelor cu node:test.
  • REPL (consola node): Consola interactivă Node.js: scrii o expresie, vezi imediat rezultatul. Comenzi .help, .editor, .load, .exit.