'\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+/