ES6标签模板(Tagged templates)

一、简介

标签模板允许你用一个方法去解析模板字符串。该方法形参的第一个参数是一个字符串数组,后面的几个参数是你传入的用${}表示的其他变量。该方法可以返回经过你处理过的字符串或者另外一个方法。
这个解析模板字符串的方法的名字是自定义的。

二、代码

1.以下是标签模板的基本使用

var person = 'Mike';
var age = 28;function myTag(strings, personExp, ageExp) {  //这就是解析标签模板字符串的方法,名字是自定义的//strings是一个字符串数组var str0 = strings[0]; // "That "var str1 = strings[1]; // " is a "var ageStr;if (ageExp > 99){ageStr = 'centenarian';} else {ageStr = 'youngster';}//经过处理后的字符串return `${str0}${personExp}${str1}${ageStr}`;
}//这里就是标签模板的调用了
//myTag+`字符串1${变量1}字符串2${变量2}`
var output = myTag`That ${ person } is a ${ age }`;console.log(output);
// That Mike is a youngster

以上代码的myTag方法就是可以解析模板字符串的解析方法,myTag的第一个形参strings是一个字符串数组。strings[0]就是'That ',注意That后面有空格,strings[1]就是' is a 'is a前后都有空格。
strings是怎么传入的呢,看看这一句

var output = myTag`That ${ person } is a ${ age }`;

没错,${para}前后分隔开的都被传入并作为strings数组里面的一个元素了,即使是空串"",也会被保存在strings里面。
再看看myTag方法中的形参personExpageExp,就分别对应上面那一句代码中的${person}${age},按顺序接收。最后myTag方法返回了一个经过处理的模板字符串

 return `${str0}${personExp}${str1}${ageStr}`;

2.标签模板方法不止能够返回字符串,还可以返回方法

function template(strings, ...keys) {return (function(...values) {   //返回的方法里面的逻辑不用太关注,注意点是可以返回一个方法var dict = values[values.length - 1] || {};var result = [strings[0]];keys.forEach(function(key, i) {var value = Number.isInteger(key) ? values[key] : dict[key];result.push(value, strings[i + 1]);});return result.join('');});
}var t1Closure = template`${0}${1}${0}!`;
t1Closure('Y', 'A');  // "YAY!"
var t2Closure = template`${0} ${'foo'}!`;
t2Closure('Hello', {foo: 'World'});  // "Hello World!"

以上是我对标签模板的理解,请多多指教!

ES6 标签模板(Tagged templates)相关推荐

  1. 笔记 --- ES6 标签模板 tagged template

    问题要从上次拼接 URL 用到的 npm 包 encodeuricomponent-tag 说起, 它的使用方式是否让你有些迷惑? const uri = require('encodeuricomp ...

  2. ES6 标签模板与模板字符串

    模板字符串 模板字符串使用反引号 () 来代替普通字符串中的用双引号和单引号.模板字符串可以包含特定语法(${expression})的占位符.占位符中的表达式和周围的文本会一起传递给一个默认函数,该 ...

  3. 深入浅出ES6:模板字符串(`和‘)

    反撇号(`)基础知识 ES6引入了一种新型的字符串字面量语法,我们称之为模板字符串(template strings).除了使用反撇号字符 ` 代替普通字符串的引号 ' 或 " 外,它们看起 ...

  4. 前端会用标签模板(Tagged Templates)就能当股神

    前端会用标签模板(Tagged Templates)就能当股神 - 林一二的文章 - 知乎 https://zhuanlan.zhihu.com/p/36426258 文因互联的问答机器人里有一个小功 ...

  5. ES6(二)——字符串模板、标签模板字符串、函数的默认参数、剩余参数、数组对象的展开语法、数值的表示、Symbol

    一.字符串模板基本使用 在ES6之前,如果我们想要将字符串和一些动态的变量(标识符)拼接到一起,是非常麻烦和丑陋的(ugly). ES6允许我们使用字符串模板来嵌入JS的变量或者表达式来进行拼接: 首 ...

  6. ES6知识点整理模板字符串和标签模板的应用

    ES6 中对字符串进行了扩展,而模板字符串就是一个非常实用的方式,可以在html中实现与变量和方法的混编 之前我们手动拼接字符串的方式 let hello = 'Hello'; let html = ...

  7. es6中 “标签模板”的一个重要应用

    "标签模板"的一个重要应用,就是过滤 HTML 字符串,防止用户输入恶意内容. let message =SaferHTML`<p>${sender} has sent ...

  8. es6模板字符串中标签模板作为参数时产生空元素的问题

    当模板字符串作为标签模板使用时,标签函数接受到的参数分别为(arr,-values) arr:模板字符串中所有那些没有变量替换的部分 -values:各个变量替换后的值 即 let a = 'Oh!' ...

  9. ES6—字符串模板引擎

    字符串模板引擎 ES5中的字符串缺乏多行字符串.字符串格式化.HTML转义等特性. 而ES6通过模板字面量的方式进行了填补,模板字面量试着跳出JS已有的字符串体系,通过一些全新的方法来 解决问题. 1 ...

最新文章

  1. 近期必读的6篇NeurIPS 2019零样本学习论文
  2. 动画原理与实现 浅析
  3. Jupyter Notebook 添加目录
  4. log4j的NDC/MDC区别与应用
  5. 让你的原型不再LOW-一套设计师倾情奉献的组件库免费下载
  6. 封装一个ViewPager真正的实现图片无限循环滚动带导航点
  7. FreeRTOS--API函数
  8. C++中常用字符串相关的编程题
  9. openflow和open vSwitch简介
  10. 去除div css背景,jQuery-拖动div CSS背景
  11. 黄金三月,技术自检 | 作为测试人必备的10项 Linux 技能
  12. 信标链 分片链 是什么?
  13. PHPObject v1.51(Flash Remoting for PHP developers)
  14. 多家广告聚合平台的混战:国内移动广告聚合平台大盘点
  15. ASCALL码对照表
  16. 理解蓝绿发布、灰度发布和滚动发布
  17. 外国人怎样看待Ubuntu麒麟?
  18. MySQL事务与存储引擎
  19. IntelliJ IDEA在Mac下格式化代码快捷键
  20. CommandLineRunner接口介绍

热门文章

  1. php时间戳转换成时间的方法
  2. Verse On-Premises 1.0.8和HCL支持、软件下载
  3. c语言实验报告中致谢词,实验报告致谢词范文.doc
  4. 那些年,我们一起做过的 Java 课后练习题(56 - 60)
  5. python怎么编写对称图案_python – 无论matplotlib中的箭头角度如何,都使箭头形状对称...
  6. 计算机网络实验三 cpt
  7. C语言中strlen和sizeof的区别
  8. 十进制逢十进一的意思
  9. 基础背包问题 - 多维有界背包问题 - 深度优先搜索 (递归)
  10. 修改RabbitMQ密码