一,新增API
1.includes()
:判断字符串是否包含某个字符片段
var str='hello world'
console.log(str.includes('llo')) //true
2.startsWith()
:判断字符串是否以某个字符片段开头
var str='hello world'
console.log(str.startsWith('he')) //true
3.endsWith()
:判断字符串是否以某个字符串结束
var str='hello world'
console.log(str.endsWith('world')) //true
4.repeat()
:重复字符串
var str='hello-'
console.log(str.repeat(3)) //'hello-hello-hello-'
5.var str = String.raw`Hi\n${2+3}!`; 不经过特殊字符的替换
// “Hi\n5!”
二, 模板字符串
1.模板字符串使用反引号 (``) 来代替普通字符串中的用双引号和单引号。模板字符串可以包含特定语法(${expression}
)的占位符。占位符中的表达式和周围的文本会一起传递给一个默认函数,该函数负责将所有的部分连接起来
var ex1='china'
var ex2='coding'
var a=10
var b=13
var t=`i love ${ex1}, i love ${ex2} too, my age=${a+b}`
console.log(t)//'i love china ,i love coding too,my age=23'
三,带标签的模板字符串
1.一个模板字符串由表达式开头,则该字符串被称为带标签的模板字符串。该表达式通常是一个函数,它会在模板字符串处理后被调用,在输出最终结果前,你都可以通过该函数来对模板字符串进行操作处理,最后,你的函数可以返回处理好的的字符串(或者它可以返回完全不同的东西 )
var name ='lin'
var age = 23
function tag(strings,ex1,ex2) //标签函数的第一个参数包含一个字符串值的数组【0】。其余的参数与表达式相关。
{
//对于strings数组会有莫名的空字符的原因,可以理解数组元素是通过${}分割,和split类似,当${}出现在头尾就会产生空字符串。
let a=strings[0] // 'that'【0】
let b=strings[1] // 'is'【0】
let c=ex2 //ex2=age
if(c>60)
{
c= 'older'
}
else
{
c='younger'
}
return a+ex1+b+c //返回一个字符串【1】
}
var a=tag`that ${name} is ${age}` //a=that lin is younger
可不返回字符串【1】
function template(strings, ...keys) {
return (function(...values) { //返回了一个函数【1】
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等于一个函数体
t1Closure('Y', 'A'); // "YAY!" //函数调用
}
2.使用场合: xsr攻击,多语言模板