本篇文章在工作中持續(xù)總結(jié),方法有簡單的,有實用的,但都是有效的,都是為了更好的開發(fā),希望對各位讀者有所幫助,不妨點贊,關(guān)注,收藏下,就當(dāng)作是個字典表,方便隨時翻閱。如有筆誤,還請評論中指出,如有疑問可在下方評論。有其他好的方法,還希望在評論中多多交流,筆者也會持續(xù)增加新的方法。
所含方法
- replace
- split
- padStart
- padEnd
- sbustr(start, len)
- substring(start, end)
- charAt()
- charCodeAt()
- indexOf
- trim
- repeat
- includes
- toUpperCase
- toLowerCase
replace()
基本用法
js中字符串的replace方法用于替換字符串中指定的字符,基本用法如下:
str.replace(regexp|substr, newSubStr|function)
let str = 'Tom is my best friend.'
let targ = str.replace('Tom', 'money')
console.log(targ) // 'money is my best friend'
然而,當(dāng)要替換的字符有多個時,上面方式往往只會替換第一個匹配到的字符。
let str = 'my friend is not your friend'
let targe = str.replace('friend', 'money')
console.log(targe) // 'my money is not your friend'
因此要全局替換時,需要使用正則
let str = 'my friend is not your friend'
// ①
let targe = str.replace(new RegExp('friend', 'g'), 'money')
// ②簡寫
let targe = str.replace(/friend/g, 'money')
console.log(targe) // 'my money is not your money'
split()
split根據(jù)傳入的參數(shù)拆分字符串,并將拆分后的結(jié)果以數(shù)組的形式返回。簡單使用:
let re = '賺,錢'.split(',')
console.log(re) // [ '賺', '錢' ]
關(guān)于split的參數(shù)形式有很多,可以不傳,傳空,傳正則:
var names = "Harry Trump ;Fred Barney";
var re = /\s*(?:;|$)\s*/;
var nameList = names.split(re);
console.log(nameList); // [ 'Harry Trump', 'Fred Barney' ]
以及經(jīng)典的字符串逆序,也是使用了split:
const str = 'abcd';
const strReverse = str.split('').reverse().join(''); // 'dcba'
關(guān)于第二個參數(shù),限制返回值中分割元素的數(shù)量:
let re = 'abcd'.split('', 2)
console.log(re) // ['a', 'b']
padStart() / padEnd()
關(guān)于padStart/padEnd為ECMAScript 2017(ES8)的新增特性,分別為在字符串的前面和后面填充字符串到指定長度
let str = '10'
let re = str.padStart(4,0)
console.log(re, str) // 0010, 10
該方法返回一個新的字符串,原字符串不變。padEnd與之類似
let str = '10'
let re = str.padEnd(4,1)
console.log(re, str) // 1011, 10
關(guān)于參數(shù)的說明
- 第一個參數(shù)指定修改后的字符串長度,第二個參數(shù)為填充內(nèi)容單位。
- 當(dāng)?shù)谝粋€參數(shù)值小于字符串長度時,字符串不作修改
let str = '1010'
console.log(str.padEnd(3,1)) // 1010
- 對于不支持該方法的編譯環(huán)境,可以通過以下代碼手動實現(xiàn):
if (!String.prototype.padStart) {
String.prototype.padStart = function padStart(targetLength,padString) {
targetLength = targetLength>>0; //floor if number or convert non-number to 0;
padString = String((typeof padString !== 'undefined' ? padString : ' '));
if (this.length > targetLength) {
return String(this);
}
else {
targetLength = targetLength-this.length;
if (targetLength > padString.length) {
padString += padString.repeat(targetLength/padString.length); //append to original to ensure we are longer than needed
}
return padString.slice(0,targetLength) + String(this);
}
};
}
來源于MDN
sbustr() / substring()
描述:sbustr與substring比較類似
- 相同點:當(dāng)兩者都是一個參數(shù)的時候,返回值為字符串該參數(shù)位置到末尾的字符串
let str = 'eqwsvwefrw12312fewf'
let sbustrStr = str.sbustr(3)
let substringStr = str.substring(3)
console.log(sbustrStr,substringStr) // 'svwefrw12312fewf'
- 不同點:當(dāng)兩者都接收兩個參數(shù)時,sbustr返回值是以參數(shù)1為起始位置,參數(shù)2為長度的字符串
let srt = 'asdo9djsdad'
let re = srt.substr(4,6)
console.log(re) // '9djsda'
- 而substring則返回以參數(shù)1為起始位置,參數(shù)2為結(jié)束位置的字符串
let srt = 'asdo9djsdad'
let re = srt.substring(4,6)
console.log(re) // '9d'
charAt()
- charAt(index): 參數(shù):一個介于0 和字符串長度減1之間的整數(shù)。 (0~length-1)
如果沒有提供索引,charAt() 將使用0。
let str = 'hello world'
console.log(str.charAt(1)) //3
console.log(str.charAt(20) // ''
charCodeAt()
返回 0 到 65535 之間的整數(shù)表示給定索引處的UTF-16代碼單元。及返回指定處字符的unicode編碼
let str = 'abc'
console.log(str.charCodeAt(1)) // 98
如此一看是否并沒有多大實際用途,那在看一個例子
let str = 'a我bc'
console.log(str.charCodeAt(1)) // 25105
在unicode編碼中,大于255的為中文字符,因此,在判斷字符串中是否中文的時候,該方法就特別實用了
indexOf()
indexOf() 方法返回調(diào)用它的 String 對象中第一次出現(xiàn)的指定值的索引,從 fromIndex 處進(jìn)行搜索。如果未找到該值,則返回 -1。
str.indexOf(searchValue, index)
// 如果只傳一個參數(shù),則默認(rèn)從0開始。
// 如果字符串中存在目標(biāo)值,返回出現(xiàn)的位置,否則返回-1
let str = 'abc'
console.log(str.indexOf('a')) // 0
console.log(str.indexOf('e')) // -1
console.log(str.indexOf('')) // 0 ()
console.log(str.indexOf('', 1) //
trim()
該方法的作用是刪除字符串兩端的空白字符串
let str = ' abc '
console.log(str) // ' abc '
console.log(str.trim()) // 'abc'
repeat()
重復(fù)字符串,接收一個參數(shù),指定字符串重復(fù)的次數(shù)
let str = 'abc'
console.log(str.repeat(3)) // 'abcabcabc'
includes()
類似于數(shù)組的includes方法,字符串的該方法也通過判斷是否存在該字符返回true/false
let str = 'acccd'
console.log(str.includes('a')) // true
console.log(str.includes('e')) // false
toLowerCase() 與 toUpperCase()
關(guān)于這兩個方法,就放在一起寫,好形成對比
- toUpperCase(): 將字符串轉(zhuǎn)換為大寫字母
- toLowerCase(): 將字符串轉(zhuǎn)換為小寫字母
- 兩個方法都返回一個新的字符串,原字符串不變
let str = 'aBcD'
console.log(str.toUpperCase()) // ABCD
console.log(str.toLowerCase()) // abcd