目的很簡(jiǎn)單,主要回顧下javascript里面String常用的一些屬性以及方法,雖然經(jīng)常使用,但其實(shí)一些細(xì)節(jié)沒有注意到,總是等到用到的時(shí)候再去查有點(diǎn)浪費(fèi)時(shí)間,因此總結(jié)了下加深印象
一、字符串的幾種聲明方式
var str = 'hello world !';
var str = String('hello world !');
var str = new String('hello world !');
var str = new Object('hello world !');
二、常用String屬性和方法
stringObj.length
作用:返回字符串的字符總數(shù)
'abc'.length; //輸出:3
stringObj.indexOf(searValue [, fromIndex])
作用:返回searchValue在stringObj中首次出現(xiàn)的位置,默認(rèn)從位置0開始搜索,除非指了開始搜索的位置 fromIndex
注意:fromIndex可選;如果沒有找到searchValue,則返回-1
'abc'.indexOf('c'); //輸出 2
'abc'.indexOf('d'); //輸出 -1
'abc abc'.indexOf('c', 3); //輸出 6
stringObj.lastIndexOf(searchValue[, fromIndex)
作用:返回searchValue在stringObj中最后一次出現(xiàn)的問題,默認(rèn)從最后一個(gè)字符開始搜索。當(dāng)指定了fromIndex時(shí),則從fromIndex位置處從后往前搜索
注意:fromIndex可選;如果沒有找到searchValue,則返回-1
'abc abc'.lastIndexOf('c'); //輸出 6
'abc abc'.lastIndexOf('d'); //輸出 -1
'abc abc'.lastIndexOf('c', 5); //輸出 2
stringObj.charAt(index)
作用:返回stringObj指定位置(index)處的字符,index的取值為 0<index<length
注意:若index>stringObj.length或index<0,則返回空字符串""
'abc'.charAt(1); //輸出 b
'abc'.charAt(10); //輸出 ""
stringObj.toUpperCase()
作用:將stringObj中的小寫字母全部轉(zhuǎn)成大寫字母
'abC'.toUpperCase(); //輸出 ABC
stringObj.toLowerCase()
作用:將stringObj中的大寫字母全部轉(zhuǎn)成小寫字母
'ABc'.toLowerCase(); //輸出 abc
stringObj.concat(string1, string2, ... stringN)
作用:連接兩個(gè)或多個(gè)字符串,首先將參數(shù)傳入的stringX轉(zhuǎn)成字符串,然后依次連接到stringObj的后面
注意:concat方法不會(huì)改變stringObj自身
var str = 'abc';
var tmp = str.concat('def'); abcdef
console.log(tmp);
console.log(str); //輸出 abc
stringObj.substring(start[, end])
作用:截取stringObj從start開始,至end為止之前的所有字符,即包括start處的字符,但不包含end處的字符
注意:end為可選參數(shù),如不指定,則截取從start開始到stringObj末尾的所有字符;start、end均為非負(fù)整數(shù)
'abcdef'.substring(1, 3); //輸出 bc
'abcdef'.substring(1); //輸出 bcdef
'abcdef'.substring(1, 1); //輸出 ""
stringObj.slice(start[, end])
作用:截取stringObj從start開始,到end為止之前的所有字符;即包括start處的字符,但不包括end處的字符。start與end均可為負(fù)值,當(dāng)為負(fù)值時(shí),表示從最后一個(gè)字符算起的第n個(gè)字符,比如-1表示最后一個(gè)字符,-2表示倒數(shù)第二個(gè)字符。
注意:end為可選參數(shù),如不指定,則截取從start開始到stringObj末尾的所有字符
'abcdef'.slice(1,3); //輸出 bc
'abcdef'.slice(1); //輸出 bcdef
'abcdef'.slice(-3); //輸出 def
'abcdef'.slice(-3, 5); //輸出 de
stringObj.split(separator[, howmany])
作用:將separtor為為分隔,將stringObj分割成一個(gè)字符串?dāng)?shù)組。separator可以是字符串或者正則表達(dá)式,若為字符串,則以separator為分割符;弱separator為正則表達(dá)式,則以符合separator指定模式的字符串作為分隔符。
注意:haowmany為可選參數(shù),表示分割獲得的字符串?dāng)?shù)組的最大長(zhǎng)度,如超過howmany指定的長(zhǎng)度,則對(duì)結(jié)果進(jìn)行截?cái)?;如果howmany為正則表達(dá)式,且包含子表達(dá)式,則獲得的數(shù)組里面包含子表達(dá)式匹配的字符串
'hello world'.split(' '); //輸出 ['hello', 'world']
'abcdef'.split(''); //輸出 ['a', 'b', 'c', 'd', 'e', 'f']
'aa bb cc dd ee'.split(' ', 3); //輸出 ['aa'
'aaa bbb ccc dd'.split(/s+/); //輸出 ['aaa', 'bbb', 'dd']
'aaa_b_ccc'.split('_b_'); //輸出 ['aaa', 'ccc']
'aaa_b_ccc'.split('_(b)_'); //輸出 ["aaa", "b", "ccc"]
stringObj.match(regexp)
作用:在字符串內(nèi)檢索指定的正則表達(dá)式的匹配結(jié)果,該結(jié)果與regexp是否有指定全局標(biāo)志g有關(guān)
1)沒有g(shù):只是執(zhí)行一次搜索;如果沒有匹配的字符串,則返回null;如果有匹配的字符串,則返回一個(gè)數(shù)組,數(shù)組的第1個(gè)元素存放的是regexp匹配的結(jié)果,數(shù)組內(nèi)剩余的其他元素,分別存放regexp子表達(dá)式匹配的結(jié)果;除此之外,返回結(jié)果還有兩個(gè)屬性,分別是input以及index;input屬性存放的是原始字符串stringObj,index是匹配的起始字符在stringObj中的位置
2)有g(shù):進(jìn)行全局搜索,并返回所有匹配的子字符串(不包含子表達(dá)式匹配結(jié)果);如果沒有匹配的字符串,返回null;如有匹配的字符串,則返回的數(shù)組里存放的所有匹配的子字符串;需要注意的時(shí)候,此時(shí)沒有index、input屬性
//無全局標(biāo)志g+無子表達(dá)式
var result = 'abc123'.match(/12/); //輸出 ['12']
console.log(result.index); //輸出 3
console.log(result.input); //輸出 'abc123'
//無全局標(biāo)志g+無匹配結(jié)果
result = 'abc123'.match(/def/); //輸出 null
//無全局標(biāo)志g+有子表達(dá)式
result = 'abc123'.match(/bc(123)/); //輸出 ['bc123', '123']
//有全局標(biāo)志+無子表達(dá)式
result = 'abc123abc123'.match(/ab/g); //輸出 ['ab', 'ab']
//無全局標(biāo)志+有子表達(dá)式
result = 'abc123abc123'.match(/abc(123)/); //輸出 ['abc123', 'abc123']
stringObj.search(regexp)
作用:檢索與正則表達(dá)式regexp匹配的子字符串。如果沒有匹配結(jié)果,則返回-1;如果有匹配結(jié)果,則返回第一個(gè)匹配結(jié)果的起始位置
'abcdef'.search(/d/); //輸出 -1
'123-456-789'.search(/-d/); //輸出 3
stringObj.match(regexp, replacement)
作用:將stringObj中的一部分字符串替換為另一部分字符串;如果regexp為字符串,則直接替換stringObj中等于regexp的第一個(gè)子字符串;如果regexp為正則表達(dá)式,則需要看是否有全局標(biāo)志g。如果無g,則替換第一個(gè)子串;如果有g(shù),則替換所有子串;
注意:注意事項(xiàng)比較多,這里只舉幾個(gè)簡(jiǎn)單例子,更多參考資料請(qǐng)參見http://www.w3school.com.cn/js/jsref_replace.asp
'Hello World'.replace('World', 'Casper'); //返回 'Hello Casper'
'123abc123'.replace(/d+/, 'D'); //返回 'Dabc123'
'123abc123'.replace(/d+/g, 'D'); //返回 'DabcD'
'abc123'.replace(/bc(12)/, function(){ //輸出 'aBC123'
console.log(arguments[0]); //輸出 'bc12'(匹配的子字符串)
console.log(arguments[1]); //輸出 '12'(匹配的第一個(gè)子表達(dá)式)
console.log(arguments[2]); //輸出 1(第一個(gè)匹配起始的位置)
console.log(arguments[3]); //輸出 'abc123'(原始字符串)
return arguments[0].toUpperCase();
});
三、寫在后面
一些比較不常用的方法,比如stringObj.charCodeAt,或者標(biāo)準(zhǔn)里面沒有明確說明實(shí)現(xiàn)的方法,如stringObj.substr,這里沒有進(jìn)行說明,如欲了解,可點(diǎn)擊下面的鏈接查看