我不确定如何解释,但是当我运行时

console.log`1`

在谷歌浏览器中,我得到的输出像
console.log`1`
VM12380:2 ["1", raw: Array[1]]

为什么反引号调用log函数,为什么它使raw: Array[1]成为索引?

由Catgocat在JS室提出的问题,但是除了有关templating strings的问题之外,没有其他答案是没有道理的,而ojit_a并不完全适合为什么发生这种情况。

最佳答案

在ES-6中被称为“标记模板”,更多关于它们的信息可以阅读Here,有趣的是,我在非常聊天的加星标部分中找到了该链接。

但是代码的相关部分在下面(您基本上可以创建过滤的排序)。

function tag(strings, ...values) {
  assert(strings[0] === 'a');
  assert(strings[1] === 'b');
  assert(values[0] === 42);
  return 'whatever';
}
tag `a${ 42 }b`  // "whatever"

基本上,它仅使用console.log函数标记“1”,就如同使用其他任何函数一样。标记功能接受模板字符串的解析值以及分别可在其上执行进一步任务的值。

Babel将上述代码转换为
var _taggedTemplateLiteralLoose = function (strings, raw) { strings.raw = raw; return strings; };

console.log(_taggedTemplateLiteralLoose(["1"], ["1"]));

如您在上面的示例中看到的那样,在被babel编译后,标签函数(console.log)被传递给以下es6-> 5编译代码的返回值。
_taggedTemplateLiteralLoose( ["1"], ["1"] );

该函数的返回值传递到console.log,该控制台随后将打印阵列。

09-10 05:38
查看更多