問題タブ [template-literals]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - ES6 テンプレート リテラルの実行を延期する
私は新しいES6 Template Literals機能で遊んでいて、最初に頭に浮かんだのString.format
は JavaScript 用だったので、プロトタイプの実装に取り掛かりました:
ただし、テンプレート リテラルは、プロトタイプ メソッドに渡される前に評価されます。上記のコードを記述して、要素を動的に作成するまで結果を延期する方法はありますか?
javascript - Javascript Es6 タグ付きテンプレート - raw はいつ使用されますか? 調理済みはいつ使用されますか?
この Es6 タグ テンプレートの例を調べた後:
返されるのはvar yo = func(strings, raw, x, y, x + y);
x
y
文字列リテラルと挿入される値の基本を理解しています。私が理解していないのは...いつ文字列が使用され、いつ生が使用されるのですか? 関数には両方の配列があり、ユーザーは raw をいつ使用し、いつ Cooked(strings) を使用するかを関数に指示する制御を持っていないためです。
javascript - 実行時に ES6 テンプレート リテラルを置き換える (または再利用する) ことはできますか?
tl;dr: 再利用可能なテンプレートをリテラルにすることは可能ですか?
私はテンプレート リテラルを使用しようとしてきましたが、私はそれを理解していないと思います。今はイライラしています。つまり、私はそれを理解していると思いますが、「それ」は、それがどのように機能するか、またはどのように取得されるかであってはなりません。それは違うものになるはずです。
私が目にするすべての例 (タグ付けされたテンプレートも含む) では、実行時ではなく宣言時に「置換」を行う必要があります。気が狂っているかもしれませんが、私にとっての「テンプレート」とは、作成時ではなく、使用時に置換されるトークンを含むドキュメントです。それ以外の場合は、単なるドキュメント (つまり、文字列) です。テンプレートはトークンとともにトークンとして保存され、それらのトークンは評価時に評価されます。
誰もが次のような恐ろしい例を挙げています。
それはいいことですが、もし私がすでに を知っているならa
、私は単にreturn 'Worthless asd'
またはreturn 'Worthless '+a
. ポイントは何ですか?真剣に。さて、ポイントは怠惰です。プラスが少なくなり、読みやすくなります。偉大な。しかし、それはテンプレートではありません。私見ではありません。そして、MHO だけが重要です。私見の問題は、テンプレートが宣言されたときに評価されることです。
は宣言されていないためexpletive
、次のように出力されますMy undefined template
。素晴らしい。実際、少なくとも Chrome では、テンプレートを宣言することさえできません。expletive
が定義されていないため、エラーがスローされます。私が必要とするのは、テンプレートを宣言した後に置換を行うことができることです:
ただし、これらは実際にはテンプレートではないため、これがどのように可能かはわかりません。タグを使うべきだとあなたが言ったとしても、いいえ、それらは機能しません:
以上のことから、テンプレート リテラルはひどく誤った名前であり、本来の名前であるヒアドキュメントと呼ばれるべきであると考えるようになりました。「リテラル」の部分が私にひっくり返ったはずだと思います(不変のように)?
何か不足していますか?再利用可能なテンプレートをリテラルにする (良い) 方法はありますか?
再利用可能なテンプレート リテラルを提供します。
そして、ここに単純な「ヘルパー」関数があります...
...「より良く」するために。
ねじれた感情を生み出す領域があるため、私はそれらをテンプレート腸管と呼ぶ傾向があります.
javascript - オブジェクト プロパティ名としてのテンプレート文字列
JavaScript がテンプレート文字列をオブジェクト プロパティ キーとして許可しないのはなぜですか? たとえば、次のように入力すると:
NodeJS REPL にSyntaxError
、長いスタック トレースと共に「予期しないテンプレート文字列」をスローします。ただし、プロパティ値は問題ありませんが、これは予想外のことではありません。ブラウザでも同様のエラーが発生します。たとえば、Firebug がSyntaxError
「無効なプロパティ ID」をスローします。
テンプレート文字列は、「計算されたプロパティ名」で許可されています。たとえば、これは次の構文をサポートするすべてのブラウザーで完全に正常にコンパイルされます。
そしてオブジェクトを作成します{"bar1": "baz"}
。
テンプレート文字列がリテラル オブジェクト キーとして許可されないのはなぜですか? パフォーマンス上の理由ですか?テンプレート文字列は、おそらく実行時にコンパイルする必要があります (間違っていたら訂正してください)。つまり、このオブジェクトに遭遇するたびに、インタープリターはオブジェクト名を計算する必要があります。「調理された」テンプレート文字列などを考慮に入れると、遅くなる可能性があるように見えますが、ES5 以降にはゲッターとセッターがありました。Firefox はこれをエラーとして言及していません。構文は将来的に許可されますか?
javascript - タグ付けされたテンプレートで兄弟置換が組み合わされていますか?
次の点を考慮してください。
と${123}${'abc'}
同等${123 + 'abc'}
ですか?つまり、シブリングは${123 + 'abc'}
裏でフォーマット変換されているのでしょうか?
また、独自のタグ付きテンプレート関数でこの特定のケースをどのように処理しますか?
javascript - ES6: ASCII 文字列を作成する不正な文字エスケープ シーケンス
これが私のコードです:
しかし、私Bad character escape sequence
はバベルから受け取ります。私は最終的にしようとしています:
\u0003
ascii
変数で。私は何を間違っていますか?
編集:
で終わったascii = (eval('"\\u00' + padded + '"'));
javascript - ES6でテンプレート文字列をネストするには?
prefer-template
eslint からエラーが発生しました。回避策として、次のように関数require
内にネストされたテンプレート文字列を関数内で使用するようにコードを変更しました。url
ただし、明らかにエラーが発生しました。これは私が以前に使用していたコードrequire
で、テンプレート文字列の代わりに関数内で連結されたプラス記号です。
ネストされたテンプレート文字列を定義することは可能でしょうか?