[解決済み] ES6テンプレートリテラルと連結文字列の比較
質問
私は以下のコードを ECMAScript 6 テンプレート・リテラル :
let person = {name: 'John Smith'};
let tpl = `My name is ${person.name}.`;
let MyVar = "My name is " + person.name + ".";
console.log("template literal= " + tpl);
console.log("my variable = " + MyVar);
出力は以下のようになります。
template literal= My name is John Smith.
my variable = My name is John Smith.
これは はバイオリンです。
正確な違いを検索してみたのですが、見つかりませんでした。 次の2つの文の違いは何ですか?
let tpl = `My name is ${person.name}.`;
そして
let MyVar = "My name is "+ person.name+".";
私はすでに、文字列
MyVar
と連結された
person.name
というように、テンプレート・リテラルを使用するシナリオはどのようなものでしょうか?
どのように解決するのですか?
テンプレートリテラルをプレースホルダのみで使用している場合(例.
`Hello ${person.name}`
のように)、結果は単に文字列を連結したものと同じになります。主観的には、その方が見栄えがよく、読みやすく、特に複数行の文字列や、文字列の中に
'
と
"
というように、これらの文字をエスケープする必要がなくなったので
可読性は素晴らしい機能ですが、テンプレートで最も興味深いのは タグ付きテンプレート・リテラル :
let person = {name: 'John Smith'};
let tag = (strArr, name) => strArr[0] + name.toUpperCase() + strArr[1];
tag `My name is ${person.name}!` // Output: My name is JOHN SMITH!
この例の3行目では、関数名
tag
という関数が呼び出されています。テンプレート文字列の内容は複数の変数に分割され、その変数にアクセスするために、引数として
tag
関数の引数でアクセスできます。リテラルセクション(この例では
strArr[0]
は
My name is
であり、その値は
strArr[1]
は
!
) と置換 (
John Smith
). テンプレート・リテラルは
tag
関数が返すものに評価されます。
は
ECMAScript wiki
には、入力の自動エスケープやエンコーディング、ローカライズのような、いくつかの可能な使用例がリストアップされています。という名前のタグ関数を作成することができます。
msg
のようなリテラルな部分を検索する
My name is
のような直訳部分を探して、現在のロケールの言語、例えばドイツ語への翻訳に置き換えます。
console.log(msg`My name is ${person.name}.`) // Output: Mein Name ist John Smith.
タグ関数が返す値は、文字列である必要さえありません。例えば
$
という名前のタグ関数を作り、文字列を評価し、それをクエリーセレクタとして使って、以下のようにDOMノードのコレクションを返します。
の例
:
$`a.${className}[href=~'//${domain}/']`
関連
-
[解決済み] JavaScriptで複数行の文字列を作成する
-
[解決済み] 数字を通貨文字列としてフォーマットする方法
-
[解決済み] ES6インポートで中括弧を使用するのはどのような場合ですか?
-
[解決済み] オブジェクトリテラル/イニシャライザーの自己参照
-
[解決済み] Reactでes6クラスを使うときの「super()」と「super(props)」の違いとは?
-
[解決済み] JavaScript ES6クラスにおけるプライベートプロパティ
-
[解決済み] Node.jsとES6におけるmodule.exportsとexport defaultの比較
-
[解決済み】Node.jsのrequireとES6のimport/exportを使い分ける。
-
[解決済み】ES6クラス変数の代替品
-
[解決済み] 無効になっている入力フィールドの値を送信する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] <Enter>でjQuery UIダイアログを送信する
-
[解決済み] Angularjs - 現在の日付を表示する
-
[解決済み] モバイルWeb HTML5フレームワークの選び方【終了しました
-
[解決済み] 無効になっている入力フィールドの値を送信する
-
[解決済み] Javascript / jQueryでAndroid端末を検出する。
-
[解決済み] jqueryはjavascriptのライブラリなのかフレームワークなのか?[クローズド]
-
[解決済み] jQueryを使用して、すべてのクリックイベントハンドラを削除するにはどうすればよいですか?
-
[解決済み] <ng-content>が空かどうかを確認する方法は?(これまでのAngular 2+で)
-
[解決済み] JavaScriptデータフォーマット/プリティプリンタ
-
[解決済み] なぜ文字列結合は配列結合より速いのですか?