web-dev-qa-db-ja.com

JavaScriptにはリテラル文字列がありますか?

C#およびRubyおよびその他の多くの言語では、エスケープする必要がないことを文字列で表すことができます。
c#では、このように

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

結果は印刷されたときのものです

\whatever\this\is

私の質問は、これはJavaScriptの任意の形式でサポートされていますか?

54
DevelopingChris

短い答え:いいえ

長い答え:Noooooooooooooooooooooooooo

135
Peter Bailey

何をしているのかはわかりませんが、エスケープの問題(など)を回避する1つの方法は、John Resigが非常に気に入っているトリックを使用することです。ページに_<script>_ブロックを含めますが、それらに「text/plain」のような「タイプ」を与えて、ブラウザーがそれらをJavaScriptに渡さないようにします。次に、スクリプトブロックのテキストを好きなように使用します。

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

次に、$('#a_string').text()(jQueryまたはそのようなものを使用していない場合はgetElementById)でそれを取得できます。

edit:John Resigが、スクリプトブロックにコンテンツをドロップすることが良いアイデアである理由について説明します。

簡単なヒント:コンテンツタイプが不明なスクリプトをページに埋め込む(ここでは、ブラウザはtext/htmlスクリプトを実行する方法を知らない)ため、ブラウザや検索エンジン、スクリーンリーダーでは無視されます。 。これは、テンプレートをページに忍び込むための完璧なクローキングデバイスです。私はこのテクニックを、ページに少しのテンプレートが必要で、軽くて速いものが欲しいという汚い状況で使用したいと思います。

このページから取得: http://ejohn.org/blog/javascript-micro-templating/

21
Pointy

リテラル文字列は、ES6言語機能を使用して利用できます。 Node v4.xはこれらをサポートし、他のES6追加の約90%も同様にサポートします。

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

JSでは、文字列リテラルはテンプレート文字列として知られています。そして、構文はかなり単純です。

3
Iain Reid

脱出を逃れるだけ

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

私はそれが今から6年遅れていることを知っていますが、これに対する1つの解決策があります;)

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

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

基本的に、正規表現を文字列に変換し、最初と最後の文字を削除します。

1
user4227915

これは、\xを文字列にスローしない限り機能します。

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

console.log(str);
1
Jonathan Newton