es6模板字符串中标签模板作为参数时产生空元素的问题
2017-07-21 22:51
232 查看
当模板字符串作为标签模板使用时,标签函数接受到的参数分别为(arr,…values)
arr:模板字符串中所有那些没有变量替换的部分
…values:各个变量替换后的值
即
在这里,(arr,…values) 等价于 (arr,value1,value2,value3),这很好理解
但是!在arr中,为什么arr[0]和arr[arr.length-1]的位置为什么出现了两个空元素???
接着我又试了试下面这个样子
excuse me???为什么又没有了?
仔细观察了一下,只有当变量出现在模板字符串的起始位置或者末尾位置时,在arr中会出现一个“”空元素
这个特性是不是有些眼熟?
对!就是spilt()!
假想一下:
标签模板在给标签函数传递arr参数时,会将原先模板字符串用 ${} 进行分割。因为分割符的两边都会产生一个元素。所以当模板字符串的两端位置出现变量时,分割后会在分割符没有元素的一侧生成一个空元素“”。
注:arr中的最后一项raw:Array
,是arr数组的一个属性,保存的是转义后的原字符串,这是为了方便取得转义之前的原始模板而设计的。
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中会出现一个“”空元素
这个特性是不是有些眼熟?
对!就是spilt()!
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
,是arr数组的一个属性,保存的是转义后的原字符串,这是为了方便取得转义之前的原始模板而设计的。
相关文章推荐
- 在模板类中使用字符串作为无类型模板参数
- 在模板类中使用字符串作为无类型模板参数
- 使用<a>标签提交表单数据的问题以及获取session作为函数的参数调用的问题
- 模板函数中指针作为调用参数时模板参数的推导问题
- Jenkins 输入字符串给newLISP 作为参数使用问题
- 关于结构体里面的字符串指针输出出现乱码的问题与结构体数组作为参数传值的问题
- <a>标签传参数问题( 参数是字符串时,应该在要传的参数外层加上单引号 '' )
- 模板函数中指针作为调用参数时模板参数的推导问题
- c++中关于数组作为函数参数并传递数组元素个数的几种有效方法的讨论
- 关于指针和数组对申请内存malloc和作为参数传递的一些问题
- Objective-c - block作为方法的参数:字符串数组的排序
- 进程间通信,把字符串指针作为参数通过SendMessage传递给另一个进程,不起作用
- 指针作为函数的参数传递的问题
- Django 模板中使用if标签进行数据比较问题
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- thinkphp 模板里a标签 href 带参数的 使用U函数方法
- 把数组中的n个元素的值分别扩大5倍,要求数组名作为参数。
- [置顶] c++使用模板时.h和.cpp分离产生的问题分析和解决方案
- a标签href带参数跳转在javascript中问题
- ajax请求到后台数据,前台不用拼接字符串append追加HTML标签,使用空模板一样显示到页面