Maison >interface Web >js tutoriel >Comment une chaîne normale peut-elle être convertie en un modèle littéral sans « eval » ou « new Function » ?

Comment une chaîne normale peut-elle être convertie en un modèle littéral sans « eval » ou « new Function » ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-22 10:05:14776parcourir

How Can a Regular String Be Converted to a Template Literal Without `eval` or `new Function`?

Transformer des chaînes simples en chaînes de modèle

Une chaîne ordinaire peut-elle être transformée sans effort en chaîne de modèle ? Prenons l'exemple suivant :

let a = "b:${b}";

Comment pouvons-nous convertir cela dynamiquement en une chaîne de modèle, sans recourir à eval, new Function ou à d'autres techniques de génération de code dynamique ?

let b = 10;
console.log(a.template()); // b:10

Une solution ES6

Dans le JavaScript moderne, nous pouvons exploiter les fonctionnalités ES6 pour y parvenir conversion :

String.prototype.interpolate = function(params) {
  const names = Object.keys(params);
  const vals = Object.values(params);
  return new Function(...names, `return \`${this}\`;`)(...vals);
};

const template = 'Example text: ${text}';
const result = template.interpolate({
  text: 'Foo Boo'
});
console.log(result); // 'Example text: Foo Boo'

Cette méthode utilise la fonction String.prototype.interpolate qui accepte un objet de paramètres. Il construit dynamiquement une nouvelle fonction en utilisant les clés et les valeurs de l'objet, puis l'exécute pour renvoyer la chaîne interpolée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn