模板字符串

6 篇文章 2 订阅
4 篇文章 0 订阅

模板字符串是es6中很方便的一个功能,以往我们写模板的话,需要我们把html文本一个个的拼接

$("#list").append(
    '<div class="goodsname">'+goodsname+'</div>' +
    '<div class="goodscount">'+goodscount+'</div> ' +
    '<div class="goodsprice">'+goodsprice+'</div> '
)

在使用模板字符串之后,我们可以写成

$("#list").append(`
     <div class="goodsname">${goodsname}</div>
     <div class="goodscount">${goodscount}</div>
     <div class="goodsprice">${goodsprice}</div>
`)

模板字符串也是字符串,只是这个字符串功能更加的强大了。用反引号(`)包含,模板字符串可以当做普通字符串使用,也可以定义多行字符串,还可以内嵌变量。

1、普通字符串

`吃了吗'\n'吃了`

2、多行字符串

console.log(`第一行
第二行`);

这里多行字符串中的所有空格换行都会保留。

3、内嵌变量

模板字符串中嵌入变量,需要将变量名写在${}之中。

let food = '红烧肉';
`你中午吃的${food}`

这样就能得到一个完整的 你中午吃的红烧肉,其实我们可以认为${}就是一个可以被单独计算的表达式,这里是可执行代码。

console.log(`1+1=${1+1}`)
//1+1=2

你会发现上面的例子中,控制台打印的是1+1=2,其中 1+1= 是字符串原有的,2是${1+1}的结果。

${}中既然只要是可执行代码都行的话,当然函数也是可以的。

function add(a,b) {
    return a+b;
}
console.log(`1+1=${add(1,1)}`)
//1+1=2

${}大括号中将默认调用对象的toString方法。所以如果{}中是未声明的变量,代码就会报错

模板字符串也可以多重嵌套

let func = (name) => `Hello ${name}!`;
console.log(`${func('Jack')},good moring`)
//Hello Jack!,good moring

可以看到函数func中使用了模板字符串,在调用func的时候也使用了模板字符串。

模板字符串还有个功能叫‘标签模板’。

所谓的标签模板,就是说当模板字符串紧跟在一个函数后面的时候,该函数会被调用来处理这个模板字符串。

alert`hello`

alert('hello')

上面两行代码执行效果是一样的。所谓的‘标签’指的就是这个函数,模板指的也就是模板字符串了。

但是如果模板字符串中含有变量,这个时候使用标签模板就需要注意了

let a=1,b=2;
function tag(...values){
    console.log(...values)
}
tag`Hello ${ a + b } world ${ a * b }`;

可以看到,上面的例子中,tag函数就收的参数并不是一个字符串,而是多个参数,其中还有一个数组。

仔细分析一下,我们发现,原来在标签模板中的模板字符串如果有变量,在调用函数的时候会对模板字符串先做一层处理,

首先会把模板字符串中没有变量的部分转换成一个字符串数组,而转换的规则就是变量本身作为一个分割,对字符串进行截取,需要注意的是如果变量在开头或者结尾,也会分出一个空字符串数组。在字符串数组完成转换后,会根据变量在模板字符串中出现的顺序,自动的把模板中的变量作为参数传递到函数中去,而且传递的是变量的结果。

在使用标签模板的时候这一点我们一定要注意。

通过标签模板的特性,标签模板一般都是作为html的安全过滤使用,用户输入恶意代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值