W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
String
對象是JavaScript原生提供的三個包裝對象之一,用來生成字符串的包裝對象。
var s1 = 'abc';
var s2 = new String('abc');
typeof s1 // "string"
typeof s2 // "object"
s2.valueOf() // "abc"
上面代碼中,變量s1
是字符串,s2
是對象。由于s2
是對象,所以有自己的方法,valueOf
方法返回的就是它所包裝的那個字符串。
實際上,字符串的包裝對象是一個類似數(shù)組的對象(即很像數(shù)組,但是實質(zhì)上不是數(shù)組)。
new String("abc")
// String {0: "a", 1: "b", 2: "c", length: 3}
除了用作構(gòu)造函數(shù),String
對象還可以當(dāng)作工具方法使用,將任意類型的值轉(zhuǎn)為字符串。
String(true) // "true"
String(5) // "5"
上面代碼將布爾值ture
和數(shù)值5
,分別轉(zhuǎn)換為字符串。
String對象提供的靜態(tài)方法(即定義在對象本身,而不是定義在對象實例的方法),主要是fromCharCode()
。該方法的參數(shù)是一系列Unicode碼點,返回對應(yīng)的字符串。
String.fromCharCode(104, 101, 108, 108, 111)
// "hello"
上面代碼中,fromCharCode
方法接受5個Unicode碼點作為參數(shù),返回它們組成的字符串。
注意,該方法不支持Unicode碼點大于0xFFFF
的字符,即傳入的參數(shù)不能大于0xFFFF
。
String.fromCharCode(0x20BB7)
// "?"
上面代碼返回字符的編號是0x0BB7
,而不是0x20BB7
。它的根本原因在于,碼點大于0xFFFF
的字符占用四個字節(jié),而JavaScript只支持兩個字節(jié)的字符。這種情況下,必須把0x20BB7
拆成兩個字符表示。
String.fromCharCode(0xD842, 0xDFB7)
// "????"
上面代碼中,0x20BB7
拆成兩個字符0xD842
和0xDFB7
(即兩個兩字節(jié)字符,合成一個四字節(jié)字符),就能得到正確的結(jié)果。碼點大于0xFFFF
的字符的四字節(jié)表示法,由UTF-16編碼方法決定。
length
屬性返回字符串的長度。
'abc'.length // 3
charAt
方法返回指定位置的字符,參數(shù)是從0
開始編號的位置。
var s = new String('abc');
s.charAt(1) // "b"
s.charAt(s.length - 1) // "c"
這個方法完全可以用數(shù)組下標(biāo)替代。
'abc'.charAt(1) // "b"
'abc'[1] // "b"
如果參數(shù)為負(fù)數(shù),或大于等于字符串的長度,charAt
返回空字符串。
'abc'.charAt(-1) // ""
'abc'.charAt(3) // ""
charCodeAt
方法返回給定位置字符的Unicode碼點(十進(jìn)制表示),相當(dāng)于String.fromCharCode()
的逆操作。
'abc'.charCodeAt(1) // 98
上面代碼中,abc
的1
號位置的字符是b
,它的Unicode碼點是98
。
如果沒有任何參數(shù),charCodeAt
返回首字符的Unicode碼點。
'abc'.charCodeAt() // 97
上面代碼中,首字符a
的Unicode編號是97。
需要注意的是,charCodeAt
方法返回的Unicode碼點不大于65536(0xFFFF),也就是說,只返回兩個字節(jié)的字符的碼點。如果遇到Unicode碼點大于65536的字符,必需連續(xù)使用兩次charCodeAt
,不僅讀入charCodeAt(i)
,還要讀入charCodeAt(i+1)
,將兩個16字節(jié)放在一起,才能得到準(zhǔn)確的字符。
如果參數(shù)為負(fù)數(shù),或大于等于字符串的長度,charCodeAt
返回NaN
。
concat
方法用于連接兩個字符串,返回一個新字符串,不改變原字符串。
var s1 = 'abc';
var s2 = 'def';
s1.concat(s2) // "abcdef"
s1 // "abc"
該方法可以接受多個參數(shù)。
'a'.concat('b', 'c') // "abc"
如果參數(shù)不是字符串,concat
方法會將其先轉(zhuǎn)為字符串,然后再連接。
var one = 1;
var two = 2;
var three = '3';
''.concat(one, two, three) // "123"
one + two + three // "33"
上面代碼中,concat
方法將參數(shù)先轉(zhuǎn)成字符串再連接,所以返回的是一個三個字符的字符串。作為對比,加號運(yùn)算符在兩個運(yùn)算數(shù)都是數(shù)值時,不會轉(zhuǎn)換類型,所以返回的是一個兩個字符的字符串。
slice
方法用于從原字符串取出子字符串并返回,不改變原字符串。
它的第一個參數(shù)是子字符串的開始位置,第二個參數(shù)是子字符串的結(jié)束位置(不含該位置)。
'JavaScript'.slice(0, 4) // "Java"
如果省略第二個參數(shù),則表示子字符串一直到原字符串結(jié)束。
'JavaScript'.slice(4) // "Script"
如果參數(shù)是負(fù)值,表示從結(jié)尾開始倒數(shù)計算的位置,即該負(fù)值加上字符串長度。
'JavaScript'.slice(-6) // "Script"
'JavaScript'.slice(0, -6) // "Java"
'JavaScript'.slice(-2, -1) // "p"
如果第一個參數(shù)大于第二個參數(shù),slice
方法返回一個空字符串。
'JavaScript'.slice(2, 1) // ""
substring
方法用于從原字符串取出子字符串并返回,不改變原字符串。它與slice
作用相同,但有一些奇怪的規(guī)則,因此不建議使用這個方法,優(yōu)先使用slice
。
substring
方法的第一個參數(shù)表示子字符串的開始位置,第二個位置表示結(jié)束位置。
'JavaScript'.substring(0, 4) // "Java"
如果省略第二個參數(shù),則表示子字符串一直到原字符串的結(jié)束。
'JavaScript'.substring(4) // "Script"
如果第二個參數(shù)大于第一個參數(shù),substring
方法會自動更換兩個參數(shù)的位置。
'JavaScript'.substring(10, 4) // "Script"
// 等同于
'JavaScript'.substring(4, 10) // "Script"
上面代碼中,調(diào)換substring
方法的兩個參數(shù),都得到同樣的結(jié)果。
如果參數(shù)是負(fù)數(shù),substring
方法會自動將負(fù)數(shù)轉(zhuǎn)為0。
'Javascript'.substring(-3) // "JavaScript"
'JavaScript'.substring(4, -3) // "Java"
上面代碼的第二個例子,參數(shù)-3
會自動變成0,等同于'JavaScript'.substring(4, 0)
。由于第二個參數(shù)小于第一個參數(shù),會自動互換位置,所以返回Java
。
substr
方法用于從原字符串取出子字符串并返回,不改變原字符串。
substr
方法的第一個參數(shù)是子字符串的開始位置,第二個參數(shù)是子字符串的長度。
'JavaScript'.substr(4, 6) // "Script"
如果省略第二個參數(shù),則表示子字符串一直到原字符串的結(jié)束。
'JavaScript'.substr(4) // "Script"
如果第一個參數(shù)是負(fù)數(shù),表示倒數(shù)計算的字符位置。如果第二個參數(shù)是負(fù)數(shù),將被自動轉(zhuǎn)為0,因此會返回空字符串。
'JavaScript'.substr(-6) // "Script"
'JavaScript'.substr(4, -1) // ""
上面代碼的第二個例子,由于參數(shù)-1
自動轉(zhuǎn)為0
,表示子字符串長度為0,所以返回空字符串。
這兩個方法用于確定一個字符串在另一個字符串中的位置,都返回一個整數(shù),表示匹配開始的位置。如果返回-1
,就表示不匹配。兩者的區(qū)別在于,indexOf
從字符串頭部開始匹配,lastIndexOf
從尾部開始匹配。
'hello world'.indexOf('o') // 4
'JavaScript'.indexOf('script') // -1
'hello world'.lastIndexOf('o') // 7
它們還可以接受第二個參數(shù),對于indexOf
方法,第二個參數(shù)表示從該位置開始向后匹配;對于lastIndexOf
,第二個參數(shù)表示從該位置起向前匹配。
'hello world'.indexOf('o', 6) // 7
'hello world'.lastIndexOf('o', 6) // 4
trim
方法用于去除字符串兩端的空格,返回一個新字符串,不改變原字符串。
' hello world '.trim()
// "hello world"
該方法去除的不僅是空格,還包括制表符(\t
、\v
)、換行符(\n
)和回車符(\r
)。
'\r\nabc \t'.trim() // 'abc'
toLowerCase
方法用于將一個字符串全部轉(zhuǎn)為小寫,toUpperCase
則是全部轉(zhuǎn)為大寫。它們都返回一個新字符串,不改變原字符串。
'Hello World'.toLowerCase()
// "hello world"
'Hello World'.toUpperCase()
// "HELLO WORLD"
這個方法也可以將布爾值或數(shù)組轉(zhuǎn)為大寫字符串,但是需要通過call
方法使用。
String.prototype.toUpperCase.call(true)
// 'TRUE'
String.prototype.toUpperCase.call(['a', 'b', 'c'])
// 'A,B,C'
localeCompare
方法用于比較兩個字符串。它返回一個整數(shù),如果小于0,表示第一個字符串小于第二個字符串;如果等于0,表示兩者相等;如果大于0,表示第一個字符串大于第二個字符串。
'apple'.localeCompare('banana')
// -1
'apple'.localeCompare('apple')
// 0
該方法的最大特點,就是會考慮自然語言的順序。舉例來說,正常情況下,大寫的英文字母小于小寫字母。
'B' > 'a' // false
上面代碼中,字母B
小于字母a
。這是因為JavaScript采用的是Unicode碼點比較,B
的碼點是66,而a
的碼點是97。
但是,localeCompare
方法會考慮自然語言的排序情況,將B
排在a
的前面。
'B'.localeCompare('a') // 1
上面代碼中,localeCompare
方法返回整數(shù)1(也有可能返回其他正整數(shù)),表示B
較大。
match
方法用于確定原字符串是否匹配某個子字符串,返回一個數(shù)組,成員為匹配的第一個字符串。如果沒有找到匹配,則返回null
。
'cat, bat, sat, fat'.match('at') // ["at"]
'cat, bat, sat, fat'.match('xt') // null
返回數(shù)組還有index
屬性和input
屬性,分別表示匹配字符串開始的位置和原始字符串。
var matches = 'cat, bat, sat, fat'.match('at');
matches.index // 1
matches.input // "cat, bat, sat, fat"
match
方法還可以使用正則表達(dá)式作為參數(shù),詳見《正則表達(dá)式》一節(jié)。
search
方法的用法等同于match
,但是返回值為匹配的第一個位置。如果沒有找到匹配,則返回-1
。
'cat, bat, sat, fat'.search('at') // 1
search
方法還可以使用正則表達(dá)式作為參數(shù),詳見《正則表達(dá)式》一節(jié)。
replace
方法用于替換匹配的子字符串,一般情況下只替換第一個匹配(除非使用帶有g
修飾符的正則表達(dá)式)。
'aaa'.replace('a', 'b') // "baa"
replace
方法還可以使用正則表達(dá)式作為參數(shù),詳見《正則表達(dá)式》一節(jié)。
split
方法按照給定規(guī)則分割字符串,返回一個由分割出來的子字符串組成的數(shù)組。
'a|b|c'.split('|') // ["a", "b", "c"]
如果分割規(guī)則為空字符串,則返回數(shù)組的成員是原字符串的每一個字符。
'a|b|c'.split('') // ["a", "|", "b", "|", "c"]
如果省略參數(shù),則返回數(shù)組的唯一成員就是原字符串。
'a|b|c'.split() // ["a|b|c"]
如果滿足分割規(guī)則的兩個部分緊鄰著(即中間沒有其他字符),則返回數(shù)組之中會有一個空字符串。
'a||c'.split('|') // ['a', '', 'c']
如果滿足分割規(guī)則的部分處于字符串的開頭或結(jié)尾(即它的前面或后面沒有其他字符),則返回數(shù)組的第一個或最后一個成員是一個空字符串。
'|b|c'.split('|') // ["", "b", "c"]
'a|b|'.split('|') // ["a", "b", ""]
split
方法還可以接受第二個參數(shù),限定返回數(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
方法的第二個參數(shù),決定了返回數(shù)組的成員數(shù)。
split
方法還可以使用正則表達(dá)式作為參數(shù),詳見《正則表達(dá)式》一節(jié)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: