1.charAt 返回指定索引出的字符
var str='abcd';
var a=str.charAt(0);
console.log(a); //'a'
console.log(str); //'abcd'
2.charCodeAt?返回指定索引出的unicode字符
str.charCodeAt(0); ? //97
3.indexof ?判斷一個(gè)字符第一次出現(xiàn)在某個(gè)字符串的索引,如果包含返回它的索引,如果不包含返回-1.
str.indexOf('a'); ? ? //0
str.indexOf('e'); ? ? //-1
4.lastIndexOf?判斷一個(gè)字符最后一次出現(xiàn)在某個(gè)字符串的索引凄鼻,如果包含返回它的索引涮拗,如果不包含返回-1.
str.lastIndexOf('b'); ? //1
str.lastIndexOf('e'); ? //-1
5.concat拼接2個(gè)字符串荞雏,返回一個(gè)新字符串幼驶,對(duì)原有字符串沒(méi)有任何改變。
var str='qwe';
var str1='abc';
var str2=str.concat(str1);
? ? console.log(str2);//"qweabc"
6.substr(n,m) 從索引n開(kāi)始,截取m個(gè)字符帜讲,將截取的字符返回,對(duì)原字符串沒(méi)有任何改變椒拗。
var b=s.substr(1,1)
console.log(b); ?//'w'
7.substring(n,m) ? 從索引n開(kāi)始似将,截取到索引m,不包括m.將截取的字符返回,對(duì)原字符串沒(méi)有任何改變.
var ee=str.substring(1,3);
console.log(ee); ?//"bc"
8.slice(n,m) ? 從索引n開(kāi)始,截取到索引m,不包括m.將截取的字符返回,對(duì)原字符串沒(méi)有任何改變.
var aa=str.slice(0,3);
console.log(aa);//'abc'
9.split ?用指定字符分割字符串蚀苛,返回一個(gè)數(shù)組.對(duì)原字符串沒(méi)有任何改變在验。
var a=str.split('');
console.log(a); ?//["a", "b", "c", "d"]
10.replace('a',1);? 替換指定字符,返回替換后新的字符串堵未,對(duì)原有字符串有改變腋舌。(第一個(gè)參數(shù)可以是正則表達(dá)式)?只能替換一次?,配合正則模式修飾符g使用
var str='aaaaee';
var reg=/a/g;
str.replace(reg,1); ? //"1111ee"
11.match()?可在字符串內(nèi)檢索指定的值渗蟹,或找到一個(gè)或多個(gè)正則表達(dá)式的匹配块饺。把找到的字符放在數(shù)組里赞辩,返回一個(gè)數(shù)組。
var str='aaaa3ed33';
var reg=/a/g;
str.match(reg); ?//["a", "a", "a", "a"]
12.search()?方法用于檢索字符串中指定的子字符串授艰,或檢索與正則表達(dá)式相匹配的子字符串辨嗽。
es6新增加的方法
1.codePointAt() ?能夠正確處理4個(gè)字節(jié)儲(chǔ)存的字符,返回指定索引出一個(gè)字符的碼點(diǎn)淮腾。codePointAt方法是測(cè)試一個(gè)字符由兩個(gè)字節(jié)還是由四個(gè)字節(jié)組成的最簡(jiǎn)單方法糟需。
var s='??a';
s.codePointAt(0)?// 134071
s.codePointAt(1)// 57271
codePointAt方法返回的是碼點(diǎn)的十進(jìn)制值,如果想要十六進(jìn)制的值谷朝,可以使用toString方法轉(zhuǎn)換一下洲押。
vars='??a';s.codePointAt(0).toString(16)// "20bb7"s.codePointAt(2).toString(16)// "61"不能識(shí)別32位的UTF-16字符
配合for...of循環(huán)使用,因?yàn)樗鼤?huì)正確識(shí)別32位的UTF-16字符徘禁。
vars='??a';for(letchofs){console.log(ch.codePointAt(0).toString(16));}// 20bb7// 61
2.codePointAt用于從碼點(diǎn)返回對(duì)應(yīng)字符诅诱,但是這個(gè)方法不能識(shí)別32位的UTF-16字符(Unicode編號(hào)大于0xFFFF)。
String.fromCodePoint(0x20BB7)// "??"String.fromCodePoint(0x78,0x1f680,0x79)==='x\uD83D\uDE80y'// true
3.for..of ?字符串的遍歷器接口
for(letcodePointof'foo'){console.log(codePoint)}// "f"http:// "o"http:// "o"
4.at() ?返回指定索引處的字符
'abc'.at(0)// "a"'??'.at(0)// "??"
5.includes():返回布爾值送朱,表示是否找到了參數(shù)字符串娘荡。這三個(gè)方法都支持第二個(gè)參數(shù),表示開(kāi)始搜索的位置驶沼。
6.startsWith():返回布爾值炮沐,表示參數(shù)字符串是否在源字符串的頭部。這三個(gè)方法都支持第二個(gè)參數(shù)回怜,表示開(kāi)始搜索的位置大年。
7.endsWith():返回布爾值,表示參數(shù)字符串是否在源字符串的尾部玉雾。這三個(gè)方法都支持第二個(gè)參數(shù)翔试,表示開(kāi)始搜索的位置。
vars='Hello world!';s.startsWith('world',6)// trues.endsWith('Hello',5)// trues.includes('Hello',6)// false
8.repeat() ?方法返回一個(gè)新字符串复旬,表示將原字符串重復(fù)n次垦缅。
'x'.repeat(3)// "xxx"'hello'.repeat(2)// "hellohello"'na'.repeat(0)// ""
9.padStart(),padEnd()字符串補(bǔ)全長(zhǎng)度的功能
? ?padStart()用于頭部補(bǔ)全
? ?padEnd()用于尾部補(bǔ)全
padStart和padEnd一共接受兩個(gè)參數(shù)驹碍,第一個(gè)參數(shù)用來(lái)指定字符串的最小長(zhǎng)度壁涎,第二個(gè)參數(shù)是用來(lái)補(bǔ)全的字符串。
'x'.padStart(5,'ab')// 'ababx''x'.padStart(4,'ab')// 'abax''x'.padEnd(5,'ab')// 'xabab''x'.padEnd(4,'ab')// 'xaba'
如果原字符串的長(zhǎng)度志秃,等于或大于指定的最小長(zhǎng)度怔球,則返回原字符串。
'xxx'.padStart(2,'ab')// 'xxx''xxx'.padEnd(2,'ab')// 'xxx'
如果用來(lái)補(bǔ)全的字符串與原字符串浮还,兩者的長(zhǎng)度之和超過(guò)了指定的最小長(zhǎng)度竟坛,則會(huì)截去超出位數(shù)的補(bǔ)全字符串。
'abc'.padStart(10,'0123456789')
如果省略第二個(gè)參數(shù),默認(rèn)使用空格補(bǔ)全長(zhǎng)度担汤。
'x'.padStart(4)// '? x''x'.padEnd(4)// 'x? '
字符串實(shí)際應(yīng)用的一些操作
1.提取URL 中的各個(gè)GET 參數(shù)(參數(shù)名和參數(shù)個(gè)數(shù)不確定)又官,將其按key-value 形式返回到一個(gè)json 結(jié)構(gòu)中,如{a:’1′, b:’2′, c:”, d:’xxx’, e:undefined}
function serilizeUrl(url) {
var urlObject = {};
if (/\?/.test(url)) {
var urlString = url.substring(url.indexOf("?") + 1);
var urlArray = urlString.split("&");
for (var i = 0, len = urlArray.length; i < len; i++) {
var urlItem = urlArray[i];
var item = urlItem.split("=");
urlObject[item[0]] = item[1];
}
return urlObject;
}
return null;
}
2.已知有字符串foo=”get-element-by-id”,寫(xiě)一個(gè)function 將其轉(zhuǎn)化成駝峰表示法”
function combo(msg){
var arr=msg.split("-");//[get,element,by,id]
for(var i=1;i<arr.length;i++){
arr[i]=arr[i].charAt(0).toUpperCase()+arr[i].substr(1,arr[i].length
-1);//Element
}
msg=arr.join("");//msg=” getElementById”
return msg;
}
3.找出字符串每個(gè)字符出現(xiàn)的個(gè)數(shù)
var str='aabbccddddd';
var objs=[];
for(var i=0;i<str.length;i++){
var flag=true;
for(var j=0;j<objs.length;j++){
if(str.charAt(i)==objs[j].name){
objs[j].count++;
flag=false;
}
}
if(flag){
objs.push({name:str.charAt(i),
count:1})
}
}
4.清除字符串空格
????????1.使用正則表達(dá)式
// str = str.replace(/\s*/g,""); ? ?//去除所有空格? ?
//
// str = str.replace(/^\s*|\s*$/g,"");//去除兩頭空格:
//
// str = str.replace( /^\s*/, “”);? ? //去除左空格
//
// str = str.replace(/(\s*$)/g, "");? //去除右空格:
????????2.使用str.trim()方法
// var str = ' xiao ming ';
// var str2 = str.trim();? //只能去除兩端的空格,不能去除中間
5.字符串中奇偶字母分別是
var str = 'asdfsadfasd';
var arr = str.split('');
var arr1 =[];
var arr2 =[];
for(var i=0;i<arr.length;i++){
if(i%2==0){
arr1.push(arr[i]);
}else{
arr2.push(arr[i]);
}
}
console.log(arr1,arr2)
6.判斷一個(gè)字符中出現(xiàn)次數(shù)最多的字符漫试,統(tǒng)計(jì)次數(shù)
var str='asjhkhdfsasasaaaasa';
var json={};
for(var i=0;i<str.length;i++){
if(!json[str.charAt(i)]){
json[str.charAt(i)]=1;
}else{
json[str.charAt(i)]++;
}
}
console.log(json);
var iMax =0;
var iIndex = '';
for(var prop in json){
if(iMax<json[prop]){
iMax=json[prop];
iIndex=prop;
}
}
console.log('出現(xiàn)最多的是:'+iIndex+'出現(xiàn)'+iMax+'次');