En JavaScript, un backtick † semble fonctionner de la même manière qu'un devis simple. Par exemple, je peux utiliser un backtick pour définir une chaîne comme celle-ci:
var s = `abc`;
Existe-t-il un moyen pour que le comportement du backtick diffère réellement de celui d'un guillemet simple?
† Notez que parmi les programmeurs, "backtick" est un nom pour ce qui est plus généralement appelé l' accent grave . Les programmeurs utilisent également parfois les noms alternatifs "backquote" et "backgrave". En outre, sur Stack Overflow et ailleurs, d'autres orthographes courantes pour "backtick" sont "back-tick" et "back tick".
Réponses:
Il s'agit d'une fonctionnalité appelée littéraux de modèle .
Ils étaient appelés «chaînes de modèle» dans les éditions précédentes de la spécification ECMAScript 2015.
Les littéraux de modèle sont pris en charge par Firefox 34, Chrome 41 et Edge 12 et supérieur, mais pas par Internet Explorer.
Les littéraux de modèle peuvent être utilisés pour représenter des chaînes multilignes et peuvent utiliser une "interpolation" pour insérer des variables:
Production:
Plus important encore, ils peuvent contenir non seulement un nom de variable, mais toute expression JavaScript:
la source
["a", "b"].join(""); // both string elements written in new lines
. Mais à part cela, on pourrait utiliser un "transpilateur" comme Babel pour convertir ES6 + en ES5alert`1`
.ECMAScript 6 propose un nouveau type de chaîne littérale, utilisant le backtick comme délimiteur. Ces littéraux permettent d'incorporer des expressions d'interpolation de chaîne de base, qui sont ensuite automatiquement analysées et évaluées.
Comme vous pouvez le voir, nous avons utilisé
`
autour d'une série de caractères, qui sont interprétés comme un littéral de chaîne, mais toutes les expressions du formulaire${..}
sont analysées et évaluées en ligne immédiatement.Un très bon avantage des littéraux de chaîne interpolés est qu'ils sont autorisés à se répartir sur plusieurs lignes:
Expressions interpolées
Toute expression valide est autorisée à apparaître à l'intérieur
${..}
dans un littéral de chaîne interpolé, y compris les appels de fonction, les appels d'expression de fonction en ligne et même d'autres littéraux de chaîne interpolés!Ici, le
`${who}s`
littéral de chaîne interpolé intérieur était un peu plus pratique pour nous lors de la combinaison de lawho
variable avec la"s"
chaîne, par opposition àwho + "s"
. De plus, pour conserver une note, un littéral de chaîne interpolée est juste délimité lexicalement là où il apparaît, non limité dynamiquement en aucune façon:L'utilisation du modèle littéral pour le HTML est nettement plus lisible en réduisant la gêne.
La vieille manière simple:
Avec ECMAScript 6:
Littéraux de modèle balisés
Nous pouvons également baliser une chaîne de modèle, lorsqu'une chaîne de modèle est balisée, les littéraux et les substitutions sont passés à la fonction qui renvoie la valeur résultante.
Nous pouvons utiliser l'opérateur d'étalement ici pour passer plusieurs valeurs. Le premier argument - nous l'avons appelé chaînes - est un tableau de toutes les chaînes simples (le truc entre toutes les expressions interpolées).
Nous recueillons ensuite tous les arguments suivants dans un tableau appelé valeurs à l' aide
... gather/rest operator
, mais vous pouvez bien sûr les ont laissé en tant que paramètres nommés individuels suivant les chaînes de paramètres comme nous l' avons fait ci - dessus (value1
,value2
, etc.).Les arguments rassemblés dans notre tableau de valeurs sont les résultats des expressions d'interpolation déjà évaluées trouvées dans le littéral de chaîne. Un littéral de chaîne balisé est comme une étape de traitement après l'évaluation des interpolations, mais avant la compilation de la valeur de chaîne finale, ce qui vous permet de mieux contrôler la génération de la chaîne à partir du littéral. Regardons un exemple de création de modèles réutilisables.
Cordes brutes
Nos fonctions de balise reçoivent un premier argument que nous avons appelé chaînes, qui est un tableau. Mais il y a un peu de données supplémentaires incluses: les versions brutes non traitées de toutes les chaînes. Vous pouvez accéder à ces valeurs de chaîne brutes à l'aide de la
.raw
propriété, comme ceci:Comme vous pouvez le voir, la version brute de la chaîne préserve la
\n
séquence d'échappement, tandis que la version traitée de la chaîne la traite comme une véritable nouvelle ligne sans échappement. ECMAScript 6 est livré avec une fonction intégrée qui peut être utilisé comme une chaîne littérale étiquette:String.raw(..)
. Il passe simplement par les versions brutes des chaînes:la source
myTaggedLiteral`test ${someText} ${2 + 3}`;
devraient être//["test ", " "]
(c'est-à-dire des chaînes non coupées).Les backticks (
`
) sont utilisés pour définir les littéraux de modèle. Les littéraux de modèle sont une nouvelle fonctionnalité d'ECMAScript 6 pour faciliter le travail avec les chaînes.Fonctionnalités:
Remarque: nous pouvons facilement utiliser des guillemets simples (
'
) et des guillemets doubles ("
) à l'intérieur des backticks (`
).Exemple:
Pour interpoler les variables ou l'expression, nous pouvons utiliser la
${expression}
notation pour cela.Les chaînes multilignes signifient que vous n'avez plus besoin d'utiliser
\n
de nouvelles lignes.Exemple:
Production:
la source
Les backticks contiennent des littéraux de modèle, anciennement appelés chaînes de modèle. Les littéraux de modèle sont des littéraux de chaîne qui permettent des expressions incorporées et des fonctions d'interpolation de chaîne.
Les littéraux de modèle ont des expressions intégrées dans des espaces réservés, désignées par le signe dollar et les accolades autour d'une expression, c'est-à-dire
${expression}
. L'espace réservé / expressions est passé à une fonction. La fonction par défaut concatène simplement la chaîne.Pour échapper à un backtick, mettez une barre oblique inverse avant:
Utilisez des raccourcis pour écrire plus facilement une chaîne de plusieurs lignes:
ou
vs vanille JavaScript:
ou
Séquences d'échappement:
\u
, par exemple\u00A9
\u{}
, par exemple\u{2F804}
\x
, par exemple\xA9
\
et (a) chiffre (s), par exemple\251
la source
Résumé:
Les backticks en JavaScript sont une fonctionnalité introduite dans ECMAScript 6 // ECMAScript 2015 pour créer des chaînes dynamiques faciles. Cette fonctionnalité ECMAScript 6 est également appelée littéral de chaîne de modèle . Il offre les avantages suivants par rapport aux chaînes normales:
''
ou""
) ne peuvent pas avoir de sauts de ligne.${myVariable}
syntaxe.Exemple:
Compatibilité du navigateur:
Le littéral de chaîne de modèle est pris en charge nativement par tous les principaux fournisseurs de navigateurs (sauf Internet Explorer). Il est donc assez économique de l'utiliser dans votre code de production. Une liste plus détaillée des compatibilités du navigateur peut être trouvée ici .
la source
Outre l'interpolation de chaînes, vous pouvez également appeler une fonction à l'aide de back-tick.
Vérifiez le composant stylisé . Ils l'utilisent beaucoup.
la source
La bonne partie est que nous pouvons faire des mathématiques de base directement:
Il est devenu vraiment utile dans une fonction d'usine:
la source