從頭開始復(fù)習(xí)js之這可能是最全的字符串用法

前面一章主要復(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á)式吧口猜。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市透揣,隨后出現(xiàn)的幾起案子济炎,更是在濱河造成了極大的恐慌,老刑警劉巖辐真,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件须尚,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡侍咱,警方通過(guò)查閱死者的電腦和手機(jī)耐床,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)楔脯,“玉大人撩轰,你說(shuō)我怎么就攤上這事∶镣ⅲ” “怎么了堪嫂?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)木柬。 經(jīng)常有香客問(wèn)我皆串,道長(zhǎng),這世上最難降的妖魔是什么眉枕? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任恶复,我火速辦了婚禮怜森,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谤牡。我一直安慰自己副硅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布拓哟。 她就那樣靜靜地躺著想许,像睡著了一般。 火紅的嫁衣襯著肌膚如雪断序。 梳的紋絲不亂的頭發(fā)上流纹,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音违诗,去河邊找鬼漱凝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛诸迟,可吹牛的內(nèi)容都是我干的茸炒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼阵苇,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼壁公!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起绅项,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤紊册,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后快耿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體囊陡,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年掀亥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了撞反。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡搪花,死狀恐怖遏片,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情撮竿,我是刑警寧澤丁稀,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站倚聚,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏凿可。R本人自食惡果不足惜惑折,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一授账、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惨驶,春花似錦白热、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至续扔,卻和暖如春攻臀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背纱昧。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工刨啸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人弹澎。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓乾胶,卻偏偏與公主長(zhǎng)得像切心,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子离例,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • ??引用類型的值(對(duì)象)是引用類型的一個(gè)實(shí)例宫蛆。 ??在 ECMAscript 中,引用類型是一種數(shù)據(jù)結(jié)構(gòu)偎球,用于將數(shù)...
    霜天曉閱讀 1,036評(píng)論 0 1
  • 概要 64學(xué)時(shí) 3.5學(xué)分 章節(jié)安排 電子商務(wù)網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,096評(píng)論 0 3
  • 第5章 引用類型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,212評(píng)論 0 4
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,367評(píng)論 0 5
  • capitalize 描述 將字符串的第一個(gè)字符大寫 語(yǔ)法 實(shí)例 輸出: islower 描述 判斷字符串是否都為...
    安靜點(diǎn)就睡吧閱讀 1,236評(píng)論 0 4