7

JavaScript ES6 の新しいテンプレート文字列を (問題があれば Firefox で) テストしているときに、それらの型にいくつかの矛盾があることに気付きました。

次のようなカスタム関数を定義しました。

function f(a) {
    console.log(typeof(a));
    console.log(a);
}

最初に、テンプレート文字列を括弧で囲んで、関数を「通常どおり」テストしました。

f(`Hello, World!`)

予想通り、これは の型をstring生成Hello, World!し、コンソールに出力されました。

次に、括弧なしで関数を省略形で呼び出したところ、矛盾が発生しました。

f`Hello, World!`

型が になりobjectArray [ "Hello, World!" ]コンソールに出力されました。

2 番目の方法を使用すると、テンプレート文字列が配列にラップされるのはなぜですか? これは単なる Firefox のバグ (ES6新しい標準です) ですか、それとも何らかの理由でこの動作が想定されているのでしょうか?

4

1 に答える 1

2
// A function call, passed the result of a template literal.
f(`str`)

// A tagged template call, passed metadata about a template.
f`str`

同じではありません。f単一の文字列を引数として最初の呼び出し。2 番目の呼び出しfは、テンプレートに応じていくつかのパラメーターを使用します。例えば

f`one${2}three${4}five`

合格するだろうf

f(strings, ...values)

strings
// ['one', 'three', 'five']

これは、テンプレートのすべての文字列セクションのリストです。

values
// [2, 4]

文字列の間に収まるすべての値です。これにより、タグは文字列を前処理して処理できます。

MDNのドキュメントはさらに役立ちます

于 2015-08-28T20:58:07.987 に答える