博客列表 >ES6标签模板的使用方式

ES6标签模板的使用方式

longlong
longlong原创
2020年09月03日 10:18:28671浏览

1. 标签模板

  • 标签模板需要结合模板字面量(模板字符串)一起使用

  • 标签模板可以理解成是一种特殊形式的函数调用

    • 函数名就是标签名,在模板字面量的前面

    • 调用参数就是模板字面量

  • 标签函数:就是以标签模板中 标签名 命名的函数

  • 标签函数中的参数 : tag(stringArr,...values)

    • stringArr : 收集模板字面量中除变量占位符(${})外的所有字符串组成的数组,并且始终最后一个元素是空字符串(""

    • values : 收集模板字面量中所有变量占位符中变量组成的数组

  • 标签模板系统约定:stringArr的长度始终会比values的长度多1,无论模板字符串中的样子长什么样,都是如此,因为它是以变量占位符作为分离点分离,并且会默认让stringArr的最后一个元素为空字符,当然如果最后一个元素在模板字符串中已经定义,则不会形成空字符

2. 标签模板示例

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <script>
  10. // 1. 使用模板字面量输出字符串
  11. let name = "jack";
  12. let site = "php.cn";
  13. let str1 = `hello ${name} , 欢迎来到 ${site}`;
  14. console.log(str1); // hello jack , 欢迎来到 php.cn
  15. // 2. 使用标签模板输出字符串
  16. let str2 = tag`hello ${name} , 欢迎来到 ${site}`;
  17. function tag(stringArr, ...values) {
  18. console.log(stringArr); // (3) ["hello ", " , 欢迎来到 ", "", raw: Array(3)]
  19. console.log(values); // (2) ["jack", "php.cn"]
  20. let result = "";
  21. for (let i = 0; i < values.length; i++) {
  22. result += stringArr[i];
  23. result += values[i];
  24. }
  25. result += stringArr[stringArr.length - 1];
  26. return result;
  27. }
  28. console.log(str2); // hello jack , 欢迎来到 php.cn
  29. // 3. 改写标签模板输出字符串的值
  30. let str3 = show`hello ${name} , 欢迎来到 ${site} !!!`;
  31. function show(stringArr, ...values) {
  32. console.log(stringArr); // (3) ["hello ", " , 欢迎来到 ", " !!!", raw: Array(3)]
  33. console.log(values); // (2) ["jack", "php.cn"]
  34. let result = "";
  35. for (let i = 0; i < values.length; i++) {
  36. result += stringArr[i];
  37. values[i] = i === 0 ? "mike" : "qq.cn";
  38. result += values[i];
  39. }
  40. result += stringArr[stringArr.length - 1];
  41. return result;
  42. }
  43. console.log(str3); // hello mike , 欢迎来到 qq.cn !!!
  44. // 总结:
  45. // 1. 从示例1和示例2看,感觉使用标签模板输出就是多此一举,效果都一样,但是代码量增大了
  46. // 2. 从示例3看,可以看出一些差别:示例1只是一个简单的声明变量,输出字符串而已,但是在实际开发中,肯定不会这样的
  47. // 我们通常会这些变量(比如:用户的输入)进行一些操作(比如:修改、过滤等等),如果使用标签模板,就可以拿到这些
  48. // 变量,然后在标签函数中对这些变量做出一些规定,最后再把经过我们自定义规则的字符串输出
  49. </script>
  50. </body>
  51. </html>

3. 标签模板中的遍历方式

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <script>
  10. let name = "jack";
  11. let site = "php.cn";
  12. let str1 = tag1`hello ${name} , 欢迎来到 ${site}`;
  13. function tag1(stringArr, ...values) {
  14. let result = "";
  15. // 遍历方式一:以长度较短的数组为基准
  16. for (let i = 0; i < values.length; i++) {
  17. result += stringArr[i];
  18. result += values[i];
  19. }
  20. result += stringArr[stringArr.length - 1];
  21. return result;
  22. }
  23. console.log(str1); // hello jack , 欢迎来到 php.cn
  24. /************************************************************/
  25. [name, site] = ["mike", "qq.cn"];
  26. str1 = tag2`hello ${name} , 欢迎来到 ${site}`;
  27. function tag2(stringArr, ...values) {
  28. let result = "";
  29. // 遍历方式二:以长度较长的数组为基准
  30. for (let i = 0; i < stringArr.length; i++) {
  31. result += stringArr[i];
  32. if (values[i]) {
  33. result += values[i];
  34. }
  35. }
  36. return result;
  37. }
  38. console.log(str1); // hello mike , 欢迎来到 qq.cn
  39. /************************************************************/
  40. // 总结:以上两种遍历方式,我觉得都可行,只不过第一种比较直观,代码简洁,好理解
  41. // 而第二种多了一层判断,所以从执行效率上讲,也许第一种稍高些
  42. </script>
  43. </body>
  44. </html>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议