在测试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 是一个新标准)还是出于某种原因预期会出现这种情况?
答案 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]
这是字符串之间的所有值。这允许标签预处理字符串并对其进行处理。