JavaScript ES6模板字符串的类型不一致

时间:2015-08-28 20:26:11

标签: javascript ecmascript-6 template-strings

在测试JavaScript ES6的新模板字符串时(在Firefox中,如果重要),我注意到它们的类型存在一些不一致。

我定义了一个自定义函数,如下所示:

rank

首先,我使用模板字符串周围的括号测试了函数"通常"。

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

正如所料,这产生了一种f(`Hello, World!`) 并且string被输出到控制台。

然后我在没有括号的情况下简短地调用了函数,并且发生了不一致。

Hello, World!

类型变为f`Hello, World!` object已输出到控制台。

使用第二种方法时,为什么模板字符串包含在数组中?这只是Firefox中的一个错误(毕竟ES6 是一个新标准)还是出于某种原因预期会出现这种情况?

1 个答案:

答案 0 :(得分: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,单个字符串作为参数。第二个使用多个参数调用f,具体取决于模板。 e.g。

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

会通过f

f(strings, ...values)

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

是模板的所有字符串部分的列表,

values
// [2, 4]

这是字符串之间的所有值。这允许标签预处理字符串并对其进行处理。

documentation on MDN can help more