Javascript ES2015中的模板字符串

Javascript ES2015中的模板字符串,javascript,ecmascript-6,template-strings,Javascript,Ecmascript 6,Template Strings,ES2015中模板字符串上下文中“传递的数组已冻结”的含义是什么 来源:您可以在ECMA脚本6中定义自定义模板文字标记。比如说, (function(parts, a, b) { return Object.isFrozen(parts) && Object.isFrozen(parts.raw); }) `foo${0}bar${0}baz`; 资料来源: 在上面的代码中,函数对象是模板文本的“标记” 当计算模板文本时,将使用模板文本的所有部分(在本例中,它们是foo、b

ES2015中模板字符串上下文中“传递的数组已冻结”的含义是什么


来源:

您可以在ECMA脚本6中定义自定义模板文字标记。比如说,

(function(parts, a, b) {
  return Object.isFrozen(parts) && Object.isFrozen(parts.raw);
}) `foo${0}bar${0}baz`;
资料来源:

在上面的代码中,函数对象是模板文本的“标记”

当计算模板文本时,将使用模板文本的所有部分(在本例中,它们是
foo
bar
、和
baz
)作为数组调用标记函数。您看到的测试用例是确保数组对象是否已冻结

测试基本上检查ES6规范

Perform SetIntegrityLevel(rawObj, "frozen").
...
Perform SetIntegrityLevel(template, "frozen").

在模板字符串的上下文中,这并不意味着任何特殊情况。它只是意味着数组。从文档中:

当且仅当对象不可冻结时,它的所有属性都是不可配置的,并且它的所有数据属性(即,不是具有getter或setter组件的访问器属性的属性)都是不可写的


因此,传递到标记函数中的字符串数组本质上是不可变的。这应该允许引擎将其存储为常量,并在每次计算标记的模板文本时重复传递相同的数组对象。

模板字符串是ECMA6的概念,我们可以在其中使用“`”编写和附加多行代码,就像以前使用字符串concat的双引号一样

var container=document.getElementById('container');
变量todo={
id:123,
名称:“拿起干洗”,
已完成:正确
}
container.innerHTML=`
${todo.name}
`
模板字符串是ECMA6的概念,在这里我们可以编写多行代码并附加“`”,就像我们以前使用字符串concat的双引号一样


值得一提的是什么是冻结对象-冻结对象是其属性无法修改的对象。您可以使用
Object.freeze
创建自己的冻结对象,并通过
Object.isfreeze
检查对象是否冻结。请注意,不可能“解冻”对象。您可以在控制台中查看:
Object.isfreeze(Object.freeze({}))
。因此,答案顶部的函数表达式意味着隐藏的函数表达式在幕后与每个模板文本关联?@BenAston不是每个文本,只是这个模板文本。如果您想将它与其他文本一起使用,您可以执行如下操作
const fn=foo${0}