3

ES2015模板字符串上下文中“传递的数组被冻结”是什么意思?

来源: http: //node.green

4

3 回答 3

3

您可以在 ECMA Script 6 中定义自定义模板文字标签。例如,

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

来源:https ://kangax.github.io/compat-table/es6/#test-template_literals

在上面的代码中,函数对象是模板字面量的“标签”。

当模板文字被计算时,标签函​​数被调用,模板文字的所有部分(在这种情况下,它们是foobarbaz)作为​​一个数组。您看到的测试用例是确保数组对象是否已经冻结。

测试基本上检查了ES6 Spec的这一部分

Perform SetIntegrityLevel(rawObj, "frozen").
...
Perform SetIntegrityLevel(template, "frozen").
于 2016-04-26T12:54:07.267 回答
3

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

一个对象被冻结当且仅当它不可扩展,它的所有属性都是不可配置的,并且它的所有数据属性(即,不是带有 getter 或 setter 组件的访问器属性的属性)都是不可写的。

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

于 2016-04-26T13:18:23.190 回答
0

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

var container = document.getElementById('container');

var todo = {
    id: 123,
    name: "Pick up dry cleaning",
    completed: true
}

container.innerHTML = `
<div todo='$(todo.id)' class="list-group-item"> 
 <i class='${todo.completed}?"hidden":"glyphicon-ok"} text-success glyphicon'></i>
 <span class="name">${todo.name}</span>
`
Templates strings are the ECMA6 concepts where we can write and append multiple line code with " ` " as before we use to do with double quotes with string concat. 
  <div id="container" class="container">
    </div>

于 2017-05-24T22:18:14.830 回答