web-dev-qa-db-fra.com

Javascript a-t-il des chaînes littérales?

En c # et Ruby et beaucoup d'autres langages, vous pouvez désigner une chaîne pour ne pas avoir besoin de s'échapper.
en c # c'est comme ça

string s = @"\whatever\this\is";

les résultats sont imprimés

\whatever\this\is

ma question est, est-ce pris en charge sous une forme quelconque en javascript?

54
DevelopingChris

Réponse courte: Non

Réponse longue: Noooooooooooooooooooooooooooo

135
Peter Bailey

Je ne sais pas où vous voulez en venir, mais une façon de contourner le problème de l'évasion (etc.) est d'utiliser une astuce que John Resig semble beaucoup aimer. Vous incluez des blocs <script> Dans une page, mais leur donnez un "type" comme "text/plain" pour vous assurer que le navigateur ne les remet pas à Javascript. Utilisez ensuite le texte du bloc de script pour ce que vous voulez.

<script id='a_string' type='text/plain'>
  Here is some stuff.
  There might be some \escape sequences in it.
</script>

Ensuite, vous pouvez récupérer cela avec $('#a_string').text() (ou avec getElementById si vous n'utilisez pas jQuery ou quelque chose comme ça).

edit: Voici l'explication de John Resig sur pourquoi déposer des trucs dans des blocs de script comme ça est une bonne idée:

Astuce: l'incorporation de scripts dans votre page dont le type de contenu est inconnu (c'est le cas ici - le navigateur ne sait pas comment exécuter un script texte/html) est simplement ignoré par le navigateur - et par les moteurs de recherche et les lecteurs d'écran . C'est un appareil de dissimulation parfait pour insérer des modèles dans votre page. J'aime utiliser cette technique pour les cas rapides et sales où j'ai juste besoin d'un petit modèle ou deux sur la page et je veux quelque chose de léger et rapide.

Tiré de cette page: http://ejohn.org/blog/javascript-micro-templating/

21
Pointy

Les chaînes littérales sont disponibles via l'utilisation des fonctionnalités du langage ES6. Node v4.x prend désormais en charge ces derniers et environ 90% des autres ajouts ES6.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/template_strings

Dans JS, les littéraux de chaîne sont appelés chaînes de modèle. Et la syntaxe est assez simple.

3
Iain Reid

Échappez juste aux évasions

var myCrazyString = "\\yes\\we\\have\\no\\bananas"
2
plodder

Je sais que c'est six ans de retard maintenant, mais j'ai une solution à cela;)

function literalString(regex) {
    return ('' + regex).slice(1, -1);
};

O.innerHTML = literalString(/\whatever\this\is/);
<pre id=O>

Vous convertissez essentiellement une expression régulière en chaîne et supprimez les premier et dernier caractères.

1
user4227915

Cela fonctionnera tant que vous ne lancez pas un \x dans la chaîne!

var str = String.raw`\whatever\this\is`;

console.log(str);
1
Jonathan Newton