web-dev-qa-db-fra.com

Quel est le principal avantage d'utiliser eval () en JavaScript?

Je sais que cela peut être une question de débutant, mais je suis curieux de savoir quel est le principal avantage de eval() - où l'utiliserait-il le mieux? J'apprécie n'importe quelle information.

37
Coffee

La fonction eval est la mieux utilisée: jamais.

Son but est d'évaluer une chaîne en tant qu'expression Javascript. Exemple:

eval('x = 42');

Il a été beaucoup utilisé auparavant, car beaucoup de gens ne savaient pas écrire le code approprié à ce qu'ils voulaient faire. Par exemple, lorsque vous utilisez un nom dynamique pour un champ:

eval('document.frm.'+frmName).value = text;

La bonne façon de faire serait:

document.frm[frmName].value = text;

Comme la méthode eval exécute la chaîne en tant que code, chaque fois qu'elle est utilisée constitue une ouverture potentielle pour une personne qui injecte du code nuisible dans la page. Voir script intersite .

Il existe quelques utilisations légitimes pour la fonction eval. Cependant, il est peu probable que vous soyez dans une situation où vous en aurez réellement besoin.

39
Guffa

C'est une question assez ancienne, et peut-être les gens n'ont-ils pas pensé aux cas d'utilisation de eval() correctement à l'époque. Une bonne utilisation de eval() consiste à implémenter hot reloading dans votre flux de développement backend ou frontend.

De manière générale, eval() peut vous permettre d’éditer du code dans votre éditeur et de le faire corriger votre application en cours d’exécution sans le redémarrer, ni perdre son état (selon l’implémentation). Vous aurez besoin d'un code associé surveillant les modifications de fichiers et envoyant les modifications à votre application, mais eval() est finalement la méthode de conversion de ces modifications en js réels.

MODIFIER

Un autre cas d'utilisation que j'ai rencontré:

Vous pouvez utiliser eval() pour contourner le processus de compilation de Webpack dans les événements pour lesquels vous souhaitez dynamiquement exiger des fichiers que vous ne souhaitez pas transpiler (comme json). Par exemple:

const data = eval('require')(`./emails/${recipient}/${type}.json`)

Sur cette note, je pense qu'il est tout à fait faux d'écrire une déclaration telle que eval() est diabolique, ou ne devrait jamais être utilisé. Des déclarations de couverture comme celles-ci sont le vrai mal!

24
Matt Way

eval permet d'exécuter (ou d'évaluer) une chaîne de code javascript.

Ainsi, il est applicable lorsque vous voulez que quelqu'un exécute une chaîne de code javascript. Comme, par exemple, dans un article éducatif sur JavaScript, le lecteur peut l'essayer immédiatement :)

Ou encore, si votre site Web est destiné aux programmeurs, vous voudrez peut-être qu'ils écrivent et exécutent leurs propres plugins.

9
Imp

eval() ne doit pas être utilisé en Javascript.

eval() était utilisé pour analyser les chaînes JSON, mais cette utilisation a été remplacée par le JSON.parse plus rapide et plus sécurisé.

8
SLaks

Le meilleur objectif d’utiliser eval est de charger le code de manière dynamique, de générer du code au moment de l’exécution et de faire de la méta-programmation similaire. En général, si vous pouvez faire la même chose sans eval, n'utilisez pas eval.

4

Vous pouvez exécuter JS qui est stocké dans la valeur d'un champ de la page Web.

Vous pouvez utiliser eval avec JS, votre code est alors plus viable pour attaquer. Tant qu'il n'utilise pas AJAX, il n'y a pas de problème de serveur.

Si vous utilisez eval, vous devriez analyser les caractères [() <> {}]

3
PitaJ

Comme indiqué précédemment, l'utilisation de eval (), .__ peut entraîner un risque potentiel. Si vous souhaitez évaluer string en tant qu'expression, vous pouvez utiliser $ {} pour évaluer une expression, introduite dans ECMA-6.

2
Swesh

eval() = evil

Vous ne devriez pas vraiment l'utiliser du tout. Il peut être utilisé pour insérer du code facilement, mais quelqu'un peut insérer des scripts incorrects à l'aide de eval(). Parfois, les utilisateurs utilisent eval() pour analyser JSON, ou 

eval("obj." + id);   //newbies

mais en réalité, vous pouvez réaliser toutes ces choses sans utiliser eval().

obj[id];             //should-do
2

Je me trompe peut-être, mais je l'utilise pour convertir une chaîne classique (d'un fichier) en chaîne de modèle ES6:

let name = 'Daman'
let classicString = 'Hello ${name}'
let templateString = eval('`' + classicString + '`')

Ce qui me donne exactement ce dont j'ai besoin:

"Hello Daman"
1
Damjan Pavlica

vous pouvez créer un squelette client et le faire fonctionner comme une application de base: recevoir des lots de code, puis les exécuter, ce qui rend le client extrêmement flexible: tout le code est stocké sur le serveur dans des lots .. Une telle chose est nécessaire, alors vous devriez peut-être utiliser Java avec des bundles Java . Pourquoi Eval est toujours dans le langage discutable, c’est un risque de sécurité trop important à utiliser

0
serup

l’un des meilleurs cas d’utilisation avec eval est le javascript logger dans lequel l’utilisateur peut exécuter javascript au moment de l’exécution. par exemple javascript logger permet à l'utilisateur d'exécuter le script dans la fenêtre du consignateur.

0
user3468426