eval în JavaScript

Structuri de control și funcții Toate browserele, Node.js

Rulează un text ca și cum ar fi cod JavaScript; aproape niciodată nu este alegerea bună.

Sintaxă
eval(textCuCod)

Ce face eval

eval primește un șir de caractere, îl rulează ca cod și returnează valoarea ultimei expresii. Dacă primește altceva decât un text, returnează valoarea neschimbată.

Este considerat periculos: dacă textul conține date de la utilizator, acesta poate rula orice cod (atac de tip injecție). Este și lent, pentru că motorul nu poate optimiza codul din jur. Pentru JSON folosește JSON.parse, iar pentru calcule cu nume de proprietăți, parantezele pătrate: obiect[cheie].

Parametri

Parametru Descriere
textCuCod Codul JavaScript, ca text.

Ce returnează

Valoarea ultimei expresii din cod.

Exemple

Exemplul 1: Ce face și cu ce îl înlocuiești

console.log(eval("2 + 3 * 4"));
console.log(eval(42));

const date = '{"oras":"Iași"}';
console.log(JSON.parse(date).oras);

const obiect = { culoare: "verde" };
const cheie = "culoare";
console.log(obiect[cheie]);

Rezultat

14
42
Iași
verde

Greșeli frecvente

  • Folosești eval pentru a citi JSON sau pentru a accesa proprietăți după nume. Ambele au alternative sigure: JSON.parse și obiect[cheie].
  • Rulezi cu eval texte din adresa URL, formulare sau baze de date. Este cea mai sigură cale spre un atac XSS.

Comenzi înrudite

  • Function() / toString: Creează o funcție din text (constructorul Function) și afișează codul sursă al unei funcții (toString).
  • JSON.parse: Transformă un text JSON într-un obiect sau tablou JavaScript.