string對(duì)象(ES5)

String對(duì)象是JavaScript原生提供的三個(gè)包裝對(duì)象之一兵多,用來(lái)生成字符串的包裝對(duì)象。

var s1 = 'abc';
var s2 = new String('abc');

typeof s1 // "string"
typeof s2 // "object"

s2.valueOf() // "abc"

上面代碼中橄仆,變量s1是字符串剩膘,s2是對(duì)象。由于s2是對(duì)象盆顾,所以有自己的方法怠褐,valueOf方法返回的就是它所包裝的那個(gè)字符串。

實(shí)際上您宪,字符串的包裝對(duì)象是一個(gè)類(lèi)似數(shù)組的對(duì)象(即很像數(shù)組奈懒,但是實(shí)質(zhì)上不是數(shù)組)奠涌。

new String("abc")
// String {0: "a", 1: "b", 2: "c", length: 3}

除了用作構(gòu)造函數(shù),String對(duì)象還可以當(dāng)作工具方法使用磷杏,將任意類(lèi)型的值轉(zhuǎn)為字符串溜畅。

String(true) // "true"
String(5) // "5"

上面代碼將布爾值ture和數(shù)值5,分別轉(zhuǎn)換為字符串极祸。

String.fromCharCode()

String對(duì)象提供的靜態(tài)方法(即定義在對(duì)象本身慈格,而不是定義在對(duì)象實(shí)例的方法),主要是fromCharCode()遥金。該方法的參數(shù)是一系列Unicode碼點(diǎn)浴捆,返回對(duì)應(yīng)的字符串。

String.fromCharCode(104, 101, 108, 108, 111)
// "hello"

上面代碼中稿械,fromCharCode方法接受5個(gè)Unicode碼點(diǎn)作為參數(shù)选泻,返回它們組成的字符串。

注意美莫,該方法不支持Unicode碼點(diǎn)大于0xFFFF的字符滔金,即傳入的參數(shù)不能大于0xFFFF。

String.fromCharCode(0x20BB7)
// "?"

上面代碼返回字符的編號(hào)是0x0BB7茂嗓,而不是0x20BB7。它的根本原因在于科阎,碼點(diǎn)大于0xFFFF的字符占用四個(gè)字節(jié)述吸,而JavaScript只支持兩個(gè)字節(jié)的字符。這種情況下锣笨,必須把0x20BB7拆成兩個(gè)字符表示蝌矛。

String.fromCharCode(0xD842, 0xDFB7)
// "??"

上面代碼中,0x20BB7拆成兩個(gè)字符0xD842和0xDFB7(即兩個(gè)兩字節(jié)字符错英,合成一個(gè)四字節(jié)字符)入撒,就能得到正確的結(jié)果。碼點(diǎn)大于0xFFFF的字符的四字節(jié)表示法椭岩,由UTF-16編碼方法決定茅逮。

實(shí)例對(duì)象的屬性和方法

length屬性

length屬性返回字符串的長(zhǎng)度。

'abc'.length // 3

charAt()

charAt方法返回指定位置的字符判哥,參數(shù)是從0開(kāi)始編號(hào)的位置献雅。

var s = new String('abc');

s.charAt(1) // "b"
s.charAt(s.length - 1) // "c"

這個(gè)方法完全可以用數(shù)組下標(biāo)替代。

'abc'.charAt(1) // "b"
'abc'[1] // "b"

如果參數(shù)為負(fù)數(shù)塌计,或大于等于字符串的長(zhǎng)度挺身,charAt返回空字符串。

'abc'.charAt(-1) // ""
'abc'.charAt(3) // ""

charCodeAt()

charCodeAt方法返回給定位置字符的Unicode碼點(diǎn)(十進(jìn)制表示)锌仅,相當(dāng)于String.fromCharCode()的逆操作章钾。

'abc'.charCodeAt(1) // 98

上面代碼中墙贱,abc的1號(hào)位置的字符是b,它的Unicode碼點(diǎn)是98贱傀。

如果沒(méi)有任何參數(shù)惨撇,charCodeAt返回首字符的Unicode碼點(diǎn)。

'abc'.charCodeAt() // 97

上面代碼中窍箍,首字符a的Unicode編號(hào)是97串纺。

需要注意的是,charCodeAt方法返回的Unicode碼點(diǎn)不大于65536(0xFFFF)椰棘。
也就是說(shuō)纺棺,只返回兩個(gè)字節(jié)的字符的碼點(diǎn)。如果遇到Unicode碼點(diǎn)大于65536的字符邪狞,必需連續(xù)使用兩次charCodeAt祷蝌,不僅讀入charCodeAt(i),還要讀入charCodeAt(i+1)帆卓,將兩個(gè)16字節(jié)放在一起巨朦,才能得到準(zhǔn)確的字符。

如果參數(shù)為負(fù)數(shù)剑令,或大于等于字符串的長(zhǎng)度糊啡,charCodeAt返回NaN。

concat()

concat方法用于連接兩個(gè)字符串吁津,返回一個(gè)新字符串棚蓄,不改變?cè)址?/p>

var s1 = 'abc';
var s2 = 'def';

s1.concat(s2) // "abcdef"
s1 // "abc"

該方法可以接受多個(gè)參數(shù)。

'a'.concat('b', 'c') // "abc"

如果參數(shù)不是字符串碍脏,concat方法會(huì)將其先轉(zhuǎn)為字符串梭依,然后再連接。

var one = 1;
var two = 2;
var three = '3';

''.concat(one, two, three) // "123"
one + two + three // "33"

上面代碼中典尾,concat方法將參數(shù)先轉(zhuǎn)成字符串再連接役拴,所以返回的是一個(gè)三個(gè)字符的字符串。作為對(duì)比钾埂,加號(hào)運(yùn)算符在兩個(gè)運(yùn)算數(shù)都是數(shù)值時(shí)河闰,不會(huì)轉(zhuǎn)換類(lèi)型,所以返回的是一個(gè)兩個(gè)字符的字符串褥紫。

slice()

slice方法用于從原字符串取出子字符串并返回淤击,不改變?cè)址?/p>

它的第一個(gè)參數(shù)是子字符串的開(kāi)始位置,第二個(gè)參數(shù)是子字符串的結(jié)束位置(不含該位置)故源。

'JavaScript'.slice(0, 4) // "Java"

如果省略第二個(gè)參數(shù)污抬,則表示子字符串一直到原字符串結(jié)束。

'JavaScript'.slice(4) // "Script"

如果參數(shù)是負(fù)值,表示從結(jié)尾開(kāi)始倒數(shù)計(jì)算的位置印机,即該負(fù)值加上字符串長(zhǎng)度矢腻。

'JavaScript'.slice(-6) // "Script"
'JavaScript'.slice(0, -6) // "Java"
'JavaScript'.slice(-2, -1) // "p"

如果第一個(gè)參數(shù)大于第二個(gè)參數(shù),slice方法返回一個(gè)空字符串射赛。

'JavaScript'.slice(2, 1) // ""

substring()

substring方法用于從原字符串取出子字符串并返回多柑,不改變?cè)址Kcslice作用相同楣责,但有一些奇怪的規(guī)則竣灌,因此不建議使用這個(gè)方法,優(yōu)先使用slice秆麸。

substring方法的第一個(gè)參數(shù)表示子字符串的開(kāi)始位置初嘹,第二個(gè)位置表示結(jié)束位置。

'JavaScript'.substring(0, 4) // "Java"

如果省略第二個(gè)參數(shù)沮趣,則表示子字符串一直到原字符串的結(jié)束屯烦。

'JavaScript'.substring(4) // "Script"

如果第二個(gè)參數(shù)大于第一個(gè)參數(shù),substring方法會(huì)自動(dòng)更換兩個(gè)參數(shù)的位置房铭。

'JavaScript'.substring(10, 4) // "Script"
// 等同于
'JavaScript'.substring(4, 10) // "Script"

上面代碼中驻龟,調(diào)換substring方法的兩個(gè)參數(shù),都得到同樣的結(jié)果缸匪。

如果參數(shù)是負(fù)數(shù)翁狐,substring方法會(huì)自動(dòng)將負(fù)數(shù)轉(zhuǎn)為0。

'Javascript'.substring(-3) // "JavaScript"
'JavaScript'.substring(4, -3) // "Java"

上面代碼的第二個(gè)例子凌蔬,參數(shù)-3會(huì)自動(dòng)變成0谴蔑,等同于'JavaScript'.substring(4, 0)。由于第二個(gè)參數(shù)小于第一個(gè)參數(shù)龟梦,會(huì)自動(dòng)互換位置,所以返回Java窃躲。

substr()

substr方法用于從原字符串取出子字符串并返回计贰,不改變?cè)址?/p>

substr方法的第一個(gè)參數(shù)是子字符串的開(kāi)始位置,第二個(gè)參數(shù)是子字符串的長(zhǎng)度蒂窒。

'JavaScript'.substr(4, 6) // "Script"

如果省略第二個(gè)參數(shù)躁倒,則表示子字符串一直到原字符串的結(jié)束。

'JavaScript'.substr(4) // "Script"

如果第一個(gè)參數(shù)是負(fù)數(shù)洒琢,表示倒數(shù)計(jì)算的字符位置秧秉。如果第二個(gè)參數(shù)是負(fù)數(shù),將被自動(dòng)轉(zhuǎn)為0衰抑,因此會(huì)返回空字符串象迎。

'JavaScript'.substr(-6) // "Script"
'JavaScript'.substr(4, -1) // ""

上面代碼的第二個(gè)例子,由于參數(shù)-1自動(dòng)轉(zhuǎn)為0,表示子字符串長(zhǎng)度為0砾淌,所以返回空字符串啦撮。

indexOf(),lastIndexOf()

這兩個(gè)方法用于確定一個(gè)字符串在另一個(gè)字符串中的位置汪厨,都返回一個(gè)整數(shù)赃春,表示匹配開(kāi)始的位置。如果返回-1劫乱,就表示不匹配织中。兩者的區(qū)別在于,indexOf從字符串頭部開(kāi)始匹配衷戈,lastIndexOf從尾部開(kāi)始匹配狭吼。

'hello world'.indexOf('o') // 4
'JavaScript'.indexOf('script') // -1

'hello world'.lastIndexOf('o') // 7

它們還可以接受第二個(gè)參數(shù),對(duì)于indexOf方法脱惰,第二個(gè)參數(shù)表示從該位置開(kāi)始向后匹配搏嗡;對(duì)于lastIndexOf,第二個(gè)參數(shù)表示從該位置起向前匹配拉一。

'hello world'.indexOf('o', 6) // 7
'hello world'.lastIndexOf('o', 6) // 4

trim()

trim方法用于去除字符串兩端的空格采盒,返回一個(gè)新字符串,不改變?cè)址?/p>

'  hello world  '.trim()
// "hello world"

該方法去除的不僅是空格蔚润,還包括制表符(\t磅氨、\v)、換行符(\n)和回車(chē)符(\r)嫡纠。

'\r\nabc \t'.trim() // 'abc'

toLowerCase(),toUpperCase

toLowerCase方法用于將一個(gè)字符串全部轉(zhuǎn)為小寫(xiě)烦租,toUpperCase則是全部轉(zhuǎn)為大寫(xiě)。
它們都返回一個(gè)新字符串除盏,不改變?cè)址?/p>

'Hello World'.toLowerCase()
// "hello world"

'Hello World'.toUpperCase()
// "HELLO WORLD"

這個(gè)方法也可以將布爾值或數(shù)組轉(zhuǎn)為大寫(xiě)字符串叉橱,但是需要通過(guò)call方法使用。

String.prototype.toUpperCase.call(true)
// 'TRUE'
String.prototype.toUpperCase.call(['a', 'b', 'c'])
// 'A,B,C'

localeCompare()

localeCompare方法用于比較兩個(gè)字符串窃祝。它返回一個(gè)整數(shù),如果小于0踱侣,表示第一個(gè)字符串小于第二個(gè)字符串粪小;如果等于0,表示兩者相等抡句;如果大于0探膊,表示第一個(gè)字符串大于第二個(gè)字符串。

'apple'.localeCompare('banana')
// -1

'apple'.localeCompare('apple')
// 0

該方法的最大特點(diǎn)待榔,就是會(huì)考慮自然語(yǔ)言的順序逞壁。舉例來(lái)說(shuō),正常情況下,大寫(xiě)的英文字母小于小寫(xiě)字母猾担。

'B' > 'a' // false

上面代碼中袭灯,字母B小于字母a。這是因?yàn)镴avaScript采用的是Unicode碼點(diǎn)比較绑嘹,B的碼點(diǎn)是66稽荧,而a的碼點(diǎn)是97。

但是工腋,localeCompare方法會(huì)考慮自然語(yǔ)言的排序情況姨丈,將B排在a的前面。

'B'.localeCompare('a') // 1

上面代碼中擅腰,localeCompare方法返回整數(shù)1(也有可能返回其他正整數(shù))蟋恬,表示B較大

match()

match方法用于確定原字符串是否匹配某個(gè)子字符串,返回一個(gè)數(shù)組趁冈,成員為匹配的第一個(gè)字符串歼争。如果沒(méi)有找到匹配,則返回null渗勘。

'cat, bat, sat, fat'.match('at') // ["at"]
'cat, bat, sat, fat'.match('xt') // null

返回?cái)?shù)組還有index屬性和input屬性沐绒,分別表示匹配字符串開(kāi)始的位置和原始字符串。

var matches = 'cat, bat, sat, fat'.match('at');
matches.index // 1
matches.input // "cat, bat, sat, fat"

search()

search方法的用法等同于match旺坠,但是返回值為匹配的第一個(gè)位置乔遮。如果沒(méi)有找到匹配,則返回-1取刃。

'cat, bat, sat, fat'.search('at') // 1

search方法還可以使用正則表達(dá)式作為參數(shù)蹋肮,詳見(jiàn)《正則表達(dá)式》一節(jié)。

replace()

replace方法用于替換匹配的子字符串璧疗,一般情況下只替換第一個(gè)匹配(除非使用帶有g(shù)修飾符的正則表達(dá)式)坯辩。

'aaa'.replace('a', 'b') // "baa"
replace方法還可以使用正則表達(dá)式作為參數(shù),詳見(jiàn)《正則表達(dá)式》一節(jié)崩侠。

split()

split方法按照給定規(guī)則分割字符串漆魔,返回一個(gè)由分割出來(lái)的子字符串組成的數(shù)組。

'a|b|c'.split('|') // ["a", "b", "c"]
如果分割規(guī)則為空字符串啦膜,則返回?cái)?shù)組的成員是原字符串的每一個(gè)字符。

'a|b|c'.split('') // ["a", "|", "b", "|", "c"]
如果省略參數(shù)淌喻,則返回?cái)?shù)組的唯一成員就是原字符串僧家。

'a|b|c'.split() // ["a|b|c"]
如果滿足分割規(guī)則的兩個(gè)部分緊鄰著(即中間沒(méi)有其他字符),則返回?cái)?shù)組之中會(huì)有一個(gè)空字符串裸删。

'a||c'.split('|') // ['a', '', 'c']
如果滿足分割規(guī)則的部分處于字符串的開(kāi)頭或結(jié)尾(即它的前面或后面沒(méi)有其他字符)八拱,則返回?cái)?shù)組的第一個(gè)或最后一個(gè)成員是一個(gè)空字符串。

'|b|c'.split('|') // ["", "b", "c"]
'a|b|'.split('|') // ["a", "b", ""]
split方法還可以接受第二個(gè)參數(shù),限定返回?cái)?shù)組的最大成員數(shù)肌稻。

'a|b|c'.split('|', 0) // []
'a|b|c'.split('|', 1) // ["a"]
'a|b|c'.split('|', 2) // ["a", "b"]
'a|b|c'.split('|', 3) // ["a", "b", "c"]
'a|b|c'.split('|', 4) // ["a", "b", "c"]
上面代碼中清蚀,split方法的第二個(gè)參數(shù),決定了返回?cái)?shù)組的成員數(shù)爹谭。

split方法還可以使用正則表達(dá)式作為參數(shù)枷邪,詳見(jiàn)《正則表達(dá)式》一節(jié)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末诺凡,一起剝皮案震驚了整個(gè)濱河市东揣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌腹泌,老刑警劉巖嘶卧,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異凉袱,居然都是意外死亡芥吟,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)专甩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)钟鸵,“玉大人,你說(shuō)我怎么就攤上這事配深⌒恚” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵篓叶,是天一觀的道長(zhǎng)烈掠。 經(jīng)常有香客問(wèn)我,道長(zhǎng)缸托,這世上最難降的妖魔是什么左敌? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮俐镐,結(jié)果婚禮上矫限,老公的妹妹穿的比我還像新娘。我一直安慰自己佩抹,他們只是感情好叼风,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著棍苹,像睡著了一般无宿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上枢里,一...
    開(kāi)封第一講書(shū)人閱讀 49,046評(píng)論 1 285
  • 那天孽鸡,我揣著相機(jī)與錄音蹂午,去河邊找鬼。 笑死彬碱,一個(gè)胖子當(dāng)著我的面吹牛豆胸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播巷疼,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼晚胡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了皮迟?” 一聲冷哼從身側(cè)響起搬泥,我...
    開(kāi)封第一講書(shū)人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎伏尼,沒(méi)想到半個(gè)月后忿檩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡爆阶,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年燥透,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辨图。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡班套,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出故河,到底是詐尸還是另有隱情吱韭,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布鱼的,位于F島的核電站理盆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏凑阶。R本人自食惡果不足惜猿规,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宙橱。 院中可真熱鬧姨俩,春花似錦、人聲如沸师郑。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)宝冕。三九已至张遭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間猬仁,已是汗流浹背帝璧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留湿刽,地道東北人的烁。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像诈闺,于是被迫代替她去往敵國(guó)和親渴庆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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