前言

本章介紹字符串對象的新增方法。不常用的方法不做重點筆記。
本章原文鏈接:字符串的新增方法

includes()、startsWith()、endsWith()

確定一個字符串是否包含在另一個字符串中。ES6 又提供了三種新方法。

  • includes() 方法用于判斷一個字符串是否包含在另一個字符串中
  • startsWith() 方法用來判斷當前字符串是否以另外一個給定的子字符串開頭
  • endsWith() 方法用來判斷當前字符串是否是以另外一個給定的子字符串“結尾”的
方法名返回值描述第二個參數 : Num
includes()布爾值一個字符串是否包含參數字符串從第 Num 個位置直到字符串結束
startsWith()布爾值一個字符串的開頭是否包含參數字符串從第 Num 個位置直到字符串結束
endsWith()布爾值一個字符串的結尾是否包含參數字符串表示前 Num 個字符
let sampleString = Hello world!;const sample1 = sampleString.includes(llo);const sample2 = sampleString.startsWith(H);const sample3 = sampleString.endsWith(d!);console.log(sample1, sample2, sample3); // true true true// 使用第二個參數const sample11 = sampleString.includes(llo, 1);const sample12 = sampleString.startsWith(H, 1);const sample13 = sampleString.endsWith(d!, 10);console.log(sample11, sample12, sample13); // true false false

repeat()

repeat()方法返回一個新字符串,表示將原字符串重復n次。
參數為小數就會向下取整,為負數和無窮(Infinity)則會報錯.

參數處理
小數向下取整
字符串先轉換成數字
負數報錯
Infinity報錯
const SAMPLE = Ha;let sample1 = SAMPLE.repeat(4); // 重復四次console.log(sample1); // HaHaHaHalet sample2 = SAMPLE.repeat(1.8); // 參數為小書,向下取整console.log(sample2); // Halet sample3 = SAMPLE.repeat(3); // 參數為字符串console.log(sample3); // HaHaHalet sample4 = SAMPLE.repeat(-4); // 參數為負數console.log(sample4); // 直接報錯 Invalid count value

padStart(),padEnd()

ES2017 引入了字符串補全長度的功能。如果某個字符串不夠指定長度,會在頭部或尾部補全。

  • padStart()用于頭部補全。
  • padEnd()用于尾部補全。

padStart()padEnd()都接受兩個參數

  • 參數一:字符串補全生效的最大長度。如果當前字符串小于指定的長度,則進行補全。
  • 參數二:用來補全的字符串。如果字符串長度過長,則會刪除后面的多出的字符串。默認空格補全。
const SAMPLE = 368;let newSample = SAMPLE.padStart(11, "000,");let newSample1 = SAMPLE.padEnd(11, ",000");console.log(newSample); // 000,000,368console.log(newSample1); // 368,000,000

trimStart(),trimEnd()

ES2019 對字符串實例新增了trimStart()trimEnd()這兩個方法。去處字符串的空白符,它們的行為與trim()一致,空白符包括:空格、制表符 tab、換行符等其他空白符等。

trim() 消除字符串的頭尾空白符。
trimStart()消除字符串頭部的空白符,別名為:trimLeft();
trimEnd()消除字符串尾部的空白符。別名為:trimRight();
返回值為一個新字符串,表示除去空格的調用字符串。

const SAMPLE =   Ha  ;let newSample = SAMPLE.trimStart();let newSample1 = SAMPLE.trimEnd();console.log(newSample); // Ha  console.log(newSample1); //   Ha

matchAll()

matchAll()方法返回一個包含所有匹配正則表達式的結果,返回的是一個迭代器(Iterator)。
這塊不深入,后面正則表達式擴展再進行詳解。

const string = sample1sample2sample3;const regex = /sample/g;for (const match of string.matchAll(regex)) {  console.log(match);}// 遍歷輸出/*[sample, index: 0, input: sample1sample2sample3, groups: undefined][sample, index: 7, input: sample1sample2sample3, groups: undefined][sample, index: 14, input: sample1sample2sample3, groups: undefined]*/

replaceAll()

簡單來說,可以一次性替換所有匹配。

// 語法String.prototype.replaceAll(searchValue, replacement);

replaceAll()方法返回一個新字符串,新字符串所有滿足 pattern 的部分都已被replacement 替換

兩個參數

  • 參數一: 可以是一個字符串,也可以是一個全局的正則表達式(帶有g修飾符)。
  • 參數二:第二個參數replacement是一個字符串,表示替換的文本,其中可以使用一些特殊字符串。除了為字符串,也可以是一個函數,該函數的返回值將替換掉第一個參數searchValue匹配的文本。
    • $&:匹配的字符串。
    • $ `:匹配結果前面的文本。
    • $:匹配結果后面的文本。
    • $n:匹配成功的第n組內容,n是從1開始的自然數。這個參數生效的前提是,第一個參數必須是正則表達式。
    • $$:指代美元符號$。
const SAMPLE = HaHa,huhu,hehe;let sample1 = SAMPLE.replaceAll(h, H);let sample2 = SAMPLE.replaceAll(H, () => h);console.log(sample1); // HaHa,HuHu,HeHeconsole.log(sample2); // haha,huhu,hehe

String.raw()

ES6 還為原生的 String 對象,提供了一個raw()方法。是用來獲取一個模板字符串的原始字符串的,在大多數情況下, String.raw()是用來處理模版字符串的。

console.log(`Hi/n${2+3}!`); // /*輸出Hi5!*/console.log( String.raw`Hi/n${2+3}!`); // 輸出 Hi/n5!

String.fromCodePoint()

String.fromCodePoint()靜態方法返回使用指定的代碼點序列創建的字符串。可以識別大于0xFFFF的字符,彌補了String.fromCharCode()方法的不足。

console.log(String.fromCodePoint(9731, 9733, 9842, 0x2F804));// 直接輸出 ?★?你