Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript ES6模板字符串的类型不一致_Javascript_Ecmascript 6_Template Strings - Fatal编程技术网

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

JavaScript ES6模板字符串的类型不一致,javascript,ecmascript-6,template-strings,Javascript,Ecmascript 6,Template Strings,在测试JavaScript ES6的新模板字符串(在Firefox中,如果有必要的话)时,我注意到它们的类型存在一些不一致 我定义了一个自定义函数,如下所示: function f(a) { console.log(typeof(a)); console.log(a); } 首先,我测试了函数“正常”,在模板字符串周围使用括号 f(`Hello, World!`) 正如所料,这产生了一种类型的string和Hello,World已输出到控制台 然后我调用了函数速记,没有括号,

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

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

function f(a) {
    console.log(typeof(a));
    console.log(a);
}
首先,我测试了函数“正常”,在模板字符串周围使用括号

f(`Hello, World!`)
正如所料,这产生了一种类型的
string
Hello,World已输出到控制台

然后我调用了函数速记,没有括号,出现了不一致

f`Hello, World!`
类型变为
object
,并且
Array[“Hello,World!”]
被输出到控制台

为什么在使用第二种方法时模板字符串被包装在数组中?这仅仅是Firefox中的一个bug(毕竟ES6是一个新标准),还是出于某种原因而期望出现这种行为

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

它们不一样。第一个使用单个字符串作为参数调用
f
。第二个调用带有多个参数的
f
,具体取决于模板。e、 g

f`one${2}three${4}five`
将通过
f

f(strings, ...values)

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

values
// [2, 4]
这是字符串之间适合的所有值。这允许标记预处理字符串并对其进行处理


.Try
console.log`a${1}b${2}c`以更好地了解正在发生的事情。通过省略括号,您完全改变了语句的含义:您不再简单地调用函数,而是使用了标记模板。是的,这种语法很糟糕。从36k的代表用户那里,我希望列表中有一个到规范的链接。有点失望。谢谢你的帮助!我建议进行编辑,添加这种语法称为标记模板字符串,正如我从@Blackhole的评论中了解到的,以帮助未来的搜索者。这个答案很有帮助,信息丰富。@UndefinedFunction:它被称为“标记模板”(无“字符串”)。我认为称之为“字符串”(官方称之为“标记的模板”和“模板文字”)有点误导,特别是因为标记的模板不一定会产生字符串。@FelixKling-hmmm,很有趣。MDN说的是“标记的模板字符串”,所以我称它们为@UndefinedFunction:Yep。我对此并不特别高兴;)
strings
// ['one', 'three', 'five']
values
// [2, 4]