'\z'==='z' //true
'\172'==='z' //true
'\x7A'==='z' //true
'\u007A'==='z' //true
'\u{7A}'==='z' //true
传统上,Javascript只有indexof方法,可以用来确定一个字符串是否包含在另一个字符串种
ES6提供了三种新方法
includes(),startsWith(),endsWith()
-includes():返回布尔值,表示是否找到了参数字符串
-startsWith():返回布尔值,表示参数字符串是否在原字符串的头部
-endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部
let s = 'Hello world!;
s.startsWith('Hello');//true
s.endsWith('!');//true
s.includes('o');//true
s.startsWith('world',6);//true 第n个到结束
s.endsWith('Hello',5);//true 前n个字符
s.includes('Hello',6);//false 第n个到结束
repeat()
repeat方法返回一个新字符串,表示将原字符串重复n次
'x'.repeat(3)//"xxx"
'hello'.repeat(2);//"hellohello"
'na'.repeat(0);//""
padStart(),padEnd()
字符串补全长度
'x'.padStart(5,'ab')//'ababx' n代表新字符串长度
'x'.padStart(4,'ab')//'abax'
'x'.padEnd(5,'ab')//'xabab'
'x'.padEnd(4,'ab')//'xaba'
模板字符串
传统输出
$('#result').append(
'There are <b>' + basket.count +'</b> +
'items in your basket, ' +
'<em>' + basket.onSale +
'</em> are on sale!'
}
ES6引入模板
//用反引号(`)标识
$('#result').append(`
There are <b>${basket.count}</b> items
in your basket,<em>${basket.onSale}</em>
are on sale!
`);
标签模板------重要应用:过滤HTML字符串,防止用户输入可以内容
let message=SaferHTML`<p>${sender} has sent you a message.</p>`;
function SaferHTML(templateData){
let s=templateData[0];
for(let i=1;i<arguments.length;i++){
let arg=String(arguments[i]);
s += arg.replace(/&/g,"&")
.replace(/</g,"<")
.replace(/>/g,">");
s += templateData[i];
}
return s;
}
上面代码中,sender变量往往是用户提供的,经过SaferHTML函数处理,里面的特殊字符都会被转义
let sender = '<script>alert("abc")</script>';//恶意代码
let message = SaferHTML`<p>${sender} has sent you a message.</p>`;
message //<p><script>alert("abc")</script> has sent you a message.</p>
字符串的正则方法 match()、replace()、search()和split()
后行断言
“先行断言”指的是,x只有在y前面才匹配,必须写成/x(?=y)/。比如只匹配百分号之前的数字,要写成/\d+(?=%)/
“先行否定断言”指的是,x只有不在y前面才匹配,必须写成/x(?!y)/。比如,只匹配不在百分号之前的数字,/\d+(?!%)/。
“后行断言”,x只有在y后面才匹配,必须写成/(?<=y)x/。比如只匹配美元符号之后的数字/(?<=\$)\d+/
“后行否定断言”,x只有不在y后面才能匹配,必须写成/(?<!y)x/。比如只匹配不在美元符号后面的数字,/(?<!\$)\d+/