一熄云、String 的屬性
1.1 length 屬性
獲取字符串的長(zhǎng)度,需要特別注意的是:JavaScript 中的中文每個(gè)漢字也只代表一個(gè)字符妙真,可能跟其他語(yǔ)言不同缴允。
'中國(guó)'.length // 2
1.2 prototype 屬性
在 OOP 中經(jīng)常用到,用來(lái)給對(duì)象添加屬性或方法珍德,且添加的屬性或方法在所有實(shí)例上共享练般。因此常用來(lái)擴(kuò)展 JavaScript 對(duì)象矗漾,如下面的代碼給 String 添加了一個(gè)去除兩邊空格的方法。
String.prototype.trim = function(){
return this.replace(/^\s*|\s*$/g,'');
}
二踢俄、String 的方法
2.1 charAt(index)
獲取指定位置的字符串缩功,從 0 到 str.length - 1
var str = 'abcdef';
charAt(2); // 'c'
charAt(2); // ''
2.2 charCodeAt(index)
返回指定位置字符的 unicode 編碼
var str = "abcde";
console.log(str.charCodeAt(0)); // 97
2.3 查找類方法
2.31 indexOf(searchValue, fromIndex)
用來(lái)檢索指定的字符串首次出現(xiàn)的位置,fromIndex 可以省略都办,省略的話從 0 開始檢索嫡锌。
var str = 'abcdeabcde';
str.indexOf('a'); // 0
str.indexOf('a', 3); // 5
str.indexOf('bc'); // 1
2.32 includes(), startsWith(), endsWith()
傳統(tǒng)上,我們通常使用 indexOf
方法來(lái)確定琳钉,一個(gè)字符串是否包含在另一個(gè)字符串中势木。ES6 又提供了三種新方法。
- includes(): 返回布爾值歌懒,表示是否找到了參數(shù)字符串啦桌。
- startsWith(): 返回布爾值,表示參數(shù)字符串是否在原字符串的頭部及皂。
- endsWith(): 返回布爾值甫男,表示參數(shù)字符串是否在原字符串的尾部。
let str = 'Hello world!';
str.startsWith('Hello'); // true
str.endsWith('!'); // true
str.includes('o'); // true
這三個(gè)方法都支持第二個(gè)參數(shù)验烧,表示開始搜索的位置板驳。
let str = 'Hello world!';
str.startsWith('world', 6); // true
str.endsWith('Hello', 5); // true
str.includes('Hello', 1); // false
可見,使用第二個(gè)參數(shù) n 時(shí)碍拆,endsWith 的行為與其他兩個(gè)方法不同若治。它針對(duì)前 n 個(gè)字符,而其他兩個(gè)方法針對(duì)從第 n 個(gè)位置直到字符串結(jié)束感混。
2.33 lastIndexOf(searchValue, fromIndex)
用來(lái)檢索指定的字符串最后出現(xiàn)的位置端幼,檢索順序從后向前。
var str = 'abcdeabcde';
console.log(str.lastIndexOf('a')); // 5
console.log(str.lastIndexOf('a', 3)); // 0 從第索引3的位置往前檢索
console.log(str.lastIndexOf('bc')); // 6
2.34 search()
str.search(subStr), str.search(regExp) 用于檢索字符串中指定的子字符串弧满,或與正則表達(dá)式相匹配的子字符串婆跑。它返回第一個(gè)子字符串的起始位置,如未匹配到庭呜,則返回 -1洽蛀。
var str = 'abcDEDF';
console.log(str.search('c')); // 2
console.log(str.search('d')); // -1
console.log(str.search(/d/i)); // 3
2.35 match()
str.match(subStr), str.match(regExp) 在字符串內(nèi)檢索指定的值,或找到一個(gè)(或多個(gè))正則表達(dá)式的匹配疟赊。
如果參數(shù)中傳入的是子字符串或沒(méi)有全局匹配的正則表達(dá)式郊供,則match方法從開始位置進(jìn)行一次匹配,若未匹配到則返回null近哟,否則返回一個(gè)數(shù)組驮审。
var str = '1a2b3c4d5be';
console.log(str.match('h')); // null
console.log(str.match('b')); // ["b", index: 3, input: "1a2b3c4d5e"]
console.log(str.match(/b/)); // ["b", index: 3, input: "1a2b3c4d5e"]
如果參數(shù)中傳入的是具有全局匹配的正則表達(dá)式,那么match從開始位置進(jìn)行多次匹配,直到最后疯淫。如沒(méi)有匹配到結(jié)果地来,則返回null。否則返回一個(gè)數(shù)組熙掺,數(shù)組中存放所有復(fù)合要求的子字符串未斑,且沒(méi)有index和input屬性。
var str = '1a2b3c4db5e';
console.log(str.match(/h/g)); // null
console.log(str.match(/\d/g)); // ["1", "2", "3", "4", "5"]
console.log(str.match(/b/g)); // ["b", "b"]
2.4 截取類方法
2.41 substring(start, end)
這是最常用到的字符串截取方法币绩,可接受兩個(gè)參數(shù)(參數(shù)不能為負(fù))蜡秽,分別是要截取的起始和結(jié)束位置。它將返回一個(gè)新的字符串缆镣,其內(nèi)容是從start到end-1處的所有字符芽突。若結(jié)束參數(shù)end省略,則表示從起始位置一直截取到最后董瞻。
var str = 'abcdefg';
console.log(str.substring(1, 4)); // bcd
console.log(str.substring(1)); // bcdefg
console.log(str.substring(-1)); // abcdefg寞蚌,傳入負(fù)值時(shí)會(huì)視為0
2.42 substr(start, length)
在字符串中抽取從start下標(biāo)開始的指定長(zhǎng)度的字符,其返回值是一個(gè)字符串钠糊,包含從start處開始的length個(gè)字符挟秤。若沒(méi)有指定length,則為從start處開始到結(jié)尾的字符抄伍。若start為負(fù)數(shù)煞聪,則表示從字符串尾部開始算起。
var str = 'abcdefg';
console.log(str.substr(1, 3)); // bcd
console.log(str.substr(2)); // cdefg
console.log(str.substr(-2, 4)); // fg逝慧,目標(biāo)長(zhǎng)度較大的話,以實(shí)際截取的長(zhǎng)度為準(zhǔn)
2.43 slice(start, end)
slice() 方法與 substring() 類似啄糙,它傳入的兩個(gè)參數(shù)也分別對(duì)應(yīng)著開始和結(jié)束位置笛臣。區(qū)別在于,slice 中的參數(shù)可以為負(fù)隧饼,若參數(shù)為負(fù)沈堡,則該參數(shù)規(guī)定的是從字符串尾部開始計(jì)算起的位置。也就是說(shuō)燕雁,-1 指字符串的最后一個(gè)字符诞丽。
var str = 'abcdefg';
console.log(str.slice(1, 4)); // bcd
console.log(str.slice(-3, -1)); // ef
console.log(str.slice(1, -1)); // bcdef
console.log(str.slice(-1, -3)); // "" 若傳入的參數(shù)有問(wèn)題,則返回空
2.5 其他方法
2.51 replace()
替換匹配的值拐格,接受兩個(gè)參數(shù)僧免,第一個(gè)是搜索模式,第二個(gè)是替換的內(nèi)容捏浊。
// replace的一個(gè)應(yīng)用懂衩,就是用來(lái)消除字符串首尾兩端的空格
var str = " hello world ";
str.replace(/^\s+|\s+$/g, '');
replace() 方法的第二個(gè)參數(shù)還可以是個(gè)函數(shù),將每一個(gè)匹配內(nèi)容替換為函數(shù)返回值。
'3 and 5'.replace(/\d/g,function(match){
return 2 * match;
}); // "6 and 10"
2.52 split(separator, howmany)
該方法用于把字符串分割成字符串?dāng)?shù)組浊洞,第一個(gè)參數(shù)表示分割位置(參考符)牵敷,第二個(gè)參數(shù)表示返回?cái)?shù)組的允許最大長(zhǎng)度。
var str = 'a|b|c|d|e';
console.log(str.split('|')); // ["a", "b", "c", "d", "e"]
console.log(str.split('|', 3)); // ["a", "b", "c"]
console.log(str.split('')); // ["a", "|", "b", "|", "c", "|", "d", "|", "e"]
也可以用正則來(lái)切割
var str = 'a1b2c3d4e';
console.log(str.split(/\d/)); // ["a", "b", "c", "d", "e"]
2.53 toLowerCase() 和 toUpperCase()
字母大小寫轉(zhuǎn)化
var str = 'JavaScript';
console.log(str.toLowerCase()); // javascript
console.log(str.toUpperCase()); // JAVASCRIPT