JavaScript ES6 模板字符串的类型不一致
Inconsistent type for JavaScript ES6 template strings
在测试 JavaScript ES6 的新模板字符串时(在 Firefox 中,如果它重要的话),我注意到它们的类型有些不一致。
我定义了一个自定义函数,像这样:
function f(a) {
console.log(typeof(a));
console.log(a);
}
首先,我测试了函数 "normally",在模板字符串两边使用括号。
f(`Hello, World!`)
正如预期的那样,这产生了一种类型 string
并且 Hello, World!
被输出到控制台。
然后我调用函数shorthand,没有括号,结果出现了不一致。
f`Hello, World!`
类型变成了object
,并且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`onethreefive`
会通过 f
f(strings, ...values)
和
strings
// ['one', 'three', 'five']
这是模板所有字符串部分的列表,并且
values
// [2, 4]
这是适合字符串之间的所有值。这允许标签预处理字符串并对其进行处理。
在测试 JavaScript ES6 的新模板字符串时(在 Firefox 中,如果它重要的话),我注意到它们的类型有些不一致。
我定义了一个自定义函数,像这样:
function f(a) {
console.log(typeof(a));
console.log(a);
}
首先,我测试了函数 "normally",在模板字符串两边使用括号。
f(`Hello, World!`)
正如预期的那样,这产生了一种类型 string
并且 Hello, World!
被输出到控制台。
然后我调用函数shorthand,没有括号,结果出现了不一致。
f`Hello, World!`
类型变成了object
,并且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`onethreefive`
会通过 f
f(strings, ...values)
和
strings
// ['one', 'three', 'five']
这是模板所有字符串部分的列表,并且
values
// [2, 4]
这是适合字符串之间的所有值。这允许标签预处理字符串并对其进行处理。