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

前端之家收集整理的这篇文章主要介绍了JavaScript ES6模板字符串的类型不一致前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在测试 JavaScript ES6的新模板字符串时(在Firefox中,如果它很重要),我注意到它们的类型有些不一致.

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

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

首先,我使用模板字符串周围的括号测试了“正常”功能.

f(`Hello,World!`)

正如预期的那样,这产生了一种字符串和Hello,World!被输出到控制台.

然后我调用函数速记,没有括号,并且发生了不一致.

f`Hello,World!`

类型变成了对象,而Array [“Hello,World!” ]被输出到控制台.

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

解决方法

// 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,具体取决于模板.例如

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

将通过f

f(strings,...values)

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

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

values
// [2,4]

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

documentation on MDN can help more.

猜你在找的JavaScript相关文章