前面一章主要復(fù)習(xí)了數(shù)組的所有方法迹蛤,今天我們開始來(lái)研究一下字符串的方法吧忽媒。
一、 es5的字符串方法
1.1茄茁、 字符串新建
- new方法新建
- toString方法轉(zhuǎn)化
- 數(shù)組的join
- 字面量定義
- length:字符串的長(zhǎng)度
關(guān)于字符串新建這相對(duì)比較簡(jiǎn)單康嘉,我就界面上面幾種方式碉输,當(dāng)然還有很多方式啊。推薦使用數(shù)組字面量的方式來(lái)新建字符串亭珍。
var str = "hello world";
var str = new String("wo shi klivitam");
var str = ["wo","shi","shui"].toString();
var str = ["wo","shi","shui"].join("");
console.log(str.length) // 9
1.2敷钾、 字符串與char
- charAt:將 this 對(duì)象轉(zhuǎn)換為一個(gè)字符串,返回包含了這個(gè)字符串 pos 位置的字符的字符串肄梨。如果那個(gè)位置沒(méi)有字符阻荒,返回空字符串。返回結(jié)果是個(gè)字符串值众羡,不是字符串對(duì)象侨赡。
- charCodeAt:將 this 對(duì)象轉(zhuǎn)換為一個(gè)字符串,返回一個(gè)代表這個(gè)字符串 pos 位置字符的代碼單元值的數(shù)字(小于 216 的非負(fù)整數(shù))粱侣。如果那個(gè)位置沒(méi)有字符羊壹,返回 NaN。
- fromCharCode: 返回一個(gè)字符串值齐婴,包含的字符數(shù)與參數(shù)數(shù)目相同舶掖。每個(gè)參數(shù)指定返回字符串中的一個(gè)字符,也就是說(shuō)第一個(gè)參數(shù)第一個(gè)字符尔店,以此類推(從左到右)
關(guān)于這個(gè),其實(shí)也有很多的作用主慰,來(lái)看下面一段代碼:
var str = "hello world";
for(var i=0;i<str.length;i++){
console.log("charAt:",str.charAt(i),",charCodeAt:",str.charCodeAt(i));
}
// charAt: h ,charCodeAt: 104
// charAt: e ,charCodeAt: 101
// charAt: l ,charCodeAt: 108
// charAt: l ,charCodeAt: 108
// charAt: o ,charCodeAt: 111
// charAt: ,charCodeAt: 32
// charAt: w ,charCodeAt: 119
// charAt: o ,charCodeAt: 111
// charAt: r ,charCodeAt: 114
// charAt: l ,charCodeAt: 108
// charAt: d ,charCodeAt: 100
上面我們可以查詢到嚣州,char的unicode值,此時(shí)我們?cè)儆眠@些unicode的值利用fromCharCode來(lái)創(chuàng)建String共螺,如下面代碼所示:
var str = String.fromCharCode(104,101,108,108,111);
console.log(str); // hello
1.3该肴、 字符串查找
- indexOf: 在給點(diǎn)字符串呢查找出現(xiàn)第一個(gè)子串的位置,如果找不到返回-1
- lastIndexOf:在給點(diǎn)字符串呢查找最后一個(gè)出現(xiàn)子串的位置藐不,如果找不到返回-1
- search:意思跟indexOf類似匀哄,唯一有差距的是 傳參是正則表達(dá)式
- match:該方法可在字符串內(nèi)檢索指定的值,或找到一個(gè)或多個(gè)正則表達(dá)式的匹配雏蛮。返回值是查找到的數(shù)組哦涎嚼。
關(guān)于這個(gè)方法的使用如下所示:
關(guān)于字符串的查找就相對(duì)比較簡(jiǎn)單了,來(lái)看下面一段代碼:
var str = "hello world";
console.log(str.indexOf("l")); // 2
console.log(str.lastIndexOf("l")); // 9
console.log(str.search(/l/)); // 2
console.log(str.indexOf("k")); // -1
var str="The rain in SPAIN stays mainly in the plain";
var n=str.match(/ain/g); // [ 'ain', 'ain', 'ain' ]
關(guān)于正則表達(dá)式這一塊挑秉,我今晚在這篇文章寫完之后 另開出一章來(lái)寫
1.4法梯、 字符串大小寫轉(zhuǎn)換
- toLowerCase/toLocaleLowerCase:將字符串中的大寫轉(zhuǎn)化成等價(jià)的小寫
- toUpperCase/toLocaleUpperCase:將字符串中的小寫轉(zhuǎn)化成等價(jià)的大寫
大小寫轉(zhuǎn)換的一個(gè)方法,/后面的方法和前面的方法 大同小異,我上網(wǎng)查詢了一下立哑,可能在土耳其啥的語(yǔ)言上有點(diǎn)不一樣夜惭。具體的效果看下面一段代碼
var str = "hello WORLD";
console.log(str.toUpperCase()) // HELLO WORLD
console.log(str.toLowerCase()) // hello world
1.5、 字符串截取與拼接
- concat:字符串的拼接
var str = "hello";
var srr1 ="world";
var str2 = str.concat(" ","world");
console.log(str2); // hello world
如上所示铛绰,該方法接收n個(gè)字符串诈茧,會(huì)將所有字符串組合成一個(gè)新的字符串。
- replace:將字符串中的字串替換成給定的字串捂掰。
var str = "hello world";
var str1 = str.replace("l","L");
console.log(str1) // heLlo world
console.log(str) // hello world
這里值得我們注意的是:replace只能替換第一個(gè)字符串的位置敢会,做Android的都是知道,Android里面有一個(gè)replaceAll方法尘颓,但是js沒(méi)有實(shí)現(xiàn)走触,js應(yīng)該如何實(shí)現(xiàn)呢?
var str = "hello world";
var str1 = str.replace(/l/g,"L");
console.log(str1) // heLLo worLd
console.log(str) // hello world
從上面代碼我們可以知道疤苹,replace第一個(gè)參數(shù)其實(shí)是正則表達(dá)式互广,關(guān)于正則,跟前面一樣 我今晚會(huì)寫一篇文章來(lái)復(fù)習(xí)這個(gè)內(nèi)容卧土,這里就不再講解了惫皱。
- slice:slice ,返回這個(gè)字符串中從 start 位置的字符到(但不包含)end 位置的字符的一個(gè)子字符串(或如果 end 是 undefined尤莺,就直接到字符串尾部)
var str = "hello world";
console.log(str.slice(0,5)); // hello
console.log(str.slice(-5)); // world
console.log(str.slice(0,100)); // hello world
這里值得我們注意的點(diǎn)是:
1旅敷、 該方法需要兩個(gè)參數(shù) start 和 end
2、 如果end大于字符串的長(zhǎng)度颤霎,end默認(rèn)為字符串的長(zhǎng)度
3媳谁、 如果存在負(fù)數(shù),則代碼字符串長(zhǎng)度加上負(fù)數(shù)為該參數(shù)
- split:該方法用于把一個(gè)字符串分割成字符串?dāng)?shù)組
var str = "hello world";
var arr1 = str.split(""); // [ 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd' ]
var arr2 = str.split("o");// [ 'hell', ' w', 'rld' ]
var arr3 = str.split("",3) // [ 'h', 'e', 'l' ]
這里值得注意的是:aplit接收兩個(gè)參數(shù)友酱,第一個(gè)參數(shù)是表示從該參數(shù)指定的地方開始分割晴音,第二個(gè)參數(shù)是指定返回?cái)?shù)組的長(zhǎng)度。
- substring:該方法用于截取字符串的給定字串
var str = "hello world";
console.log(str.substring(0,5)); // hello
console.log(str.substring(0,1000)); // hello world
主力值得注意的是:substring 方法需要兩個(gè)參數(shù) start 和 end缔杉,锤躁,返回包含在轉(zhuǎn)換結(jié)果字符串中從 start 位置字符一直到(但不包括)end 位置的字符(或如果 end 是 undefined,就到字符串末尾的一個(gè)子串或详。
- trim: 該方法去除字符串開頭和結(jié)尾的空格
var str1 = " hello world 1 ";
var str2 = str1.trim()
console.log(str2); // hello world 1
console.log(str1); // hello world 1
值得注意的是系羞,該方法只能去除開頭和結(jié)尾的空格,不能去除所有的空格哦霸琴。
二椒振、 es5后的字符串方法
2.1、 字符串的查找
- includes: 返回布爾值沈贝,表示是否找到了參數(shù)字符串杠人。
- startsWith:返回布爾值,表示參數(shù)字符串是否在原字符串的頭部。
- endsWith:返回布爾值嗡善,表示參數(shù)字符串是否在原字符串的尾部辑莫。
let str = 'Hello world!';
str.startsWith('Hello') // true
str.endsWith('!') // true
str.includes('o') // true
str.startsWith('world', 6) // true
str.endsWith('Hello', 5) // true
str.includes('Hello', 6) // false
從上面我們可以發(fā)現(xiàn),這三個(gè)方法都能接收兩個(gè)參數(shù)罩引,第一個(gè)是用來(lái)匹配的參數(shù) 第二個(gè)則是用來(lái)定位到查找的位置各吨。但endsWith的行為與其他兩個(gè)方法有所不同。它針對(duì)前n個(gè)字符袁铐,而其他兩個(gè)方法針對(duì)從第n個(gè)位置直到字符串結(jié)束揭蜒。
2.2、 字符串的拼接
- repeat:該方法返回一個(gè)新字符串剔桨,表示將原字符串重復(fù)n次
'hello'.repeat(2); // "hellohello"
'na'.repeat(0); // ""
'he'.repeat(2.9); // "hehe"
'hello'.repeat(Infinity); // RangeError
'hello'.repeat(-1); // RangeError
'na'.repeat(NaN) // ""
'na'.repeat('na') // ""
'na'.repeat('3') // "nanana"
這里值得我們注意的是:
1屉更、 參數(shù)如果是小數(shù),會(huì)被取整
2洒缀、 如果repeat的參數(shù)是負(fù)數(shù)或者Infinity瑰谜,會(huì)報(bào)錯(cuò)
3、 參數(shù)NaN等同于 0树绩。
4萨脑、 參數(shù)是字符串,則會(huì)先轉(zhuǎn)換成數(shù)字饺饭。
- padStart/padEnd:如果某個(gè)字符串不夠指定長(zhǎng)度渤早,會(huì)在頭部或尾部補(bǔ)全
'x'.padStart(5, 'ab') // 'ababx'
'x'.padStart(4, 'ab') // 'abax'
'x'.padEnd(5, 'ab') // 'xabab'
'x'.padEnd(4, 'ab') // 'xaba'
'xxx'.padStart(2, 'ab') // 'xxx'
'xxx'.padEnd(2, 'ab') // 'xxx'
'x'.padStart(4) // ' x'
'x'.padEnd(4) // 'x '
這里值得注意的是:
1、該方法接收兩個(gè)參數(shù)瘫俊,第一個(gè)參數(shù)是字符串補(bǔ)全生效的最大長(zhǎng)度鹊杖,第二個(gè)參數(shù)是用來(lái)補(bǔ)全的字符串 當(dāng)?shù)诙€(gè)參數(shù)被省略的時(shí)候,默認(rèn)用空格填充
2扛芽、 如果原字符串的長(zhǎng)度仅淑,等于或大于最大長(zhǎng)度,則字符串補(bǔ)全不生效胸哥,返回原字符串。
3赡鲜、 如果用來(lái)補(bǔ)全的字符串與原字符串空厌,兩者的長(zhǎng)度之和超過(guò)了最大長(zhǎng)度,則會(huì)截去超出位數(shù)的補(bǔ)全字符串银酬。
- 模版字符串
我們知道嘲更,在es6以前的語(yǔ)法,字符串的拼接一般都采用:
var fristStr = "dadasdas"
var secondStr = "bbjbj"
var str = fristStr +secondStr;
在es6中揩瞪,其實(shí)新定義了一種字符串拼接的方式:模版字符串``
模板字符串(template string)是增強(qiáng)版的字符串赋朦,用反引號(hào)(`)標(biāo)識(shí)。它可以當(dāng)作普通字符串使用,也可以用來(lái)定義多行字符串宠哄,或者在字符串中嵌入變量壹将。
上面的代碼我們就可以簡(jiǎn)單的寫成:
var str = `${fristStr} +${secondStr}`;
設(shè)置里面都還可以做一些運(yùn)算
var a1 = 1;
var a2 = 2;
console.log(result) // a1+a2 = 3
關(guān)于模版字符串,肯定還有更多毛嫉、更細(xì)致的用法诽俯,我這里就不做具體的舉例了。怎么說(shuō)了承粤,有些奧妙只有自己在實(shí)際使用中才能領(lǐng)會(huì)的暴区。
說(shuō)在最后
關(guān)于字符串的使用,這一篇文章把我在開發(fā)中經(jīng)常能用到的一些方法都做了一次總結(jié) 怎么說(shuō)呢辛臊?也沒(méi)幾個(gè)方法仙粱。掌握、記憶起來(lái)還是比較簡(jiǎn)單的彻舰,其實(shí)最難的無(wú)非就是正則表達(dá)式哪一塊伐割,現(xiàn)在中午也沒(méi)什么時(shí)間了,我就不多說(shuō)了 先睡會(huì)兒覺(jué) 等今晚下班了淹遵,再來(lái)細(xì)細(xì)的探究所謂的正則表達(dá)式吧口猜。