当模板字符串作为标签模板使用时,标签函数接受到的参数分别为(arr,…values)

  • arr:模板字符串中所有那些没有变量替换的部分
  • …values:各个变量替换后的值

let a = 'Oh!';
let b = 'the';
let c = 'very much!'
tag `${a} I love ${b} JavaScript ${c}`;function tag(arr, ...values) {console.log(arr);      //["", " I love ", " javascript ", "", raw: Array[4]]for(let i in values){console.log(values[i]);     //oh!//the//very much!}
}

在这里,(arr,…values) 等价于 (arr,value1,value2,value3),这很好理解

但是!在arr中,为什么arr[0]和arr[arr.length-1]的位置为什么出现了两个空元素???

接着我又试了试下面这个样子

let a = 'Oh!';
let b = "the";
let c = "very much!"
tag `I love ${b} javascript`;function tag(arr, ...values) {console.log(arr);    //["I love ", " javascript", raw: Array[2]]for(let i in values){console.log(values[i]);//the  }
}

excuse me???为什么又没有了?

仔细观察了一下,只有当变量出现在模板字符串的起始位置或者末尾位置时,在arr中会出现一个“”空元素

这个特性是不是有些眼熟?

对!就是split()!

let a = 'Oh my god!';
let b = a.split(' ');
console.log(b);     //["Oh", "my", "god!"]let c = ' Oh my god! ';
let d = c.split(' ');
console.log(d);     //["", "Oh", "my", "god!", ""];

假想一下

标签模板在给标签函数传递arr参数时,会将原先模板字符串${} 进行分割。因为分割符的两边都会产生一个元素。所以当模板字符串的两端位置出现变量时,分割后会在分割符没有元素的一侧生成一个空元素“”。

注:arr中的最后一项raw:Array[n],是arr数组的一个属性,保存的是转义后的原字符串,这是为了方便取得转义之前的原始模板而设计的。

es6模板字符串中标签模板作为参数时产生空元素的问题相关推荐

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

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

  2. 模板字符串中 嵌套模板字符串

    模板字符串中有需求循环数据放到其中,原先我用arr.map(item=><li><a>${arr.content}</a></li>) 这样不符合 ...

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

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

  4. es6中标签模板实例中的tab函数的理解

    let a = 5; let b = 10; tag`A ${ a + b } B ${ a * b }`; // 等同于 tag(['A', ' B', ''], 15, 50); function ...

  5. es6模板字符串中循环遍历数据踩坑

    应该很少有这种需求,需要在模板字符串利循环遍历数据,现在框架都有自己模板语法. 我这里踩的坑是,我在模板字符串中用forEach,map遍历循环时,返回值一直是一个undefined 用for循环re ...

  6. javascript模板字符串(标签函数)

    前面介绍了javascript的模板字符串的基本知识,今天深入学习一下标签函数 模板字符串概述 这里先简单说一下模板字符串的概念 1.模板字符串,从名字上可以得出其实返回的是字符串,普通使用其实就想引 ...

  7. 在模板字符串中条件判断和遍历

    1.在模板字符串中遍历 ${item1.groupDetail.map((item2) => {return `<div id="check_name_box"> ...

  8. idea java代码注释中@标签模板创建,apidoc接口文档@标签模板创建

    我们在开发工具中的代码注释经常会用到一些@标签,比如常用的@author ,如下: 那么我们如果要自定义一些自己需要的注释标签模板呢,比如在使用 apidoc生成接口模板时,就需要经常写一些apido ...

  9. (js)模板字符串中使用循环遍历数据:

    (js)模板字符串中使用循环遍历数据: // 数据格式 let wordList = {id: "2",question: "李四",content: [{ n ...

最新文章

  1. 轻量级自动化运维工具Fabric的安装与实践
  2. html-body标签中相关标签 02
  3. 11.1 安装配置Apache
  4. apache phoenix 入门_实现Phoenix入门
  5. TCP close_wait内幕
  6. sql server 设置用户名和密码
  7. 后疫情时代:对话下一个 10 年的技术趋势
  8. 计算机键盘换挡键,电脑键盘上的换挡键是哪个
  9. Linux设备驱动程序学习(2)-调试技术
  10. LINQ体验(14)——LINQ to SQL语句之存储过程 夺表
  11. 生存分析原理简明教程 单因素生存分析 Kaplan-Meier、LogRank 只能针对单一的变量进行 多因素cox回归分析
  12. 微信浏览器与企业微信浏览器ua
  13. 上机7 java异常处理,JavaSE学习笔记(七)——java异常处理机制
  14. 原生滑动选择器 html,自已开发完美的触摸屏网页版仿app弹窗型滚动列表选择器/日期选择器 - j.king...
  15. 新唐单片机选型手册_Nuvoton新唐8位8051单片机选型指南
  16. adb为Android的root方法,Android 实现永久性开启adb 的root权限
  17. JAVA random 缺陷_Random在高并发下的缺陷以及JUC对其的优化
  18. 算法竞赛常见赛制及题目形式
  19. 哪些Python技术助力人工智能发展
  20. Android Camera2 之 CameraDevice 详解

热门文章

  1. 成都拓嘉辰丰电商:抖音如何来售卖拼多多货物
  2. java学习之路 之 多线程练习题
  3. 我靠!PC机器上可以装Mac OS X啦!!
  4. 中南大学:误解已解除!
  5. python中的类数据成员和对象数据成员
  6. linux中iptables配置文件及命令详解详解
  7. echarts横向柱状图单个柱子设置警戒线,超过警戒线为渐变蓝色,没超过为渐变红色
  8. Servlet (Java Web 学习笔记)
  9. 量化投资学习——Dealing with the Inventory Risk A solution to the market making problem
  10. 放大电路微变等效法——交流分析思路;混合参数模型的建立、简化、参数确定;微变等效电路法