ES6 字串的拓展方法

2020-08-12 14:48:06

一、子串的識別

ES6 之前判斷字串是否包含子串,用 indexOf 方法,ES6 新增了子串的識別方法。

  • includes():返回布爾值,判斷是否找到參數字串。
  • startsWith():返回布爾值,判斷參數字串是否在原字串的頭部。
  • endsWith():返回布爾值,判斷參數字串是否在原字串的尾部。

以上三個方法都可以接受兩個參數,需要搜尋的字串,和可選的搜尋起始位置索引。

let string = "apple,banana,orange";

string.includes("banana"); // true

string.startsWith("apple"); // true

string.endsWith("apple"); // false

string.startsWith("banana",6) // true

注意點:

  • 這三個方法只返回布爾值,如果需要知道子串的位置,還是得用 indexOf 和 lastIndexOf 。
  • 這三個方法如果傳入了正則表達式而不是字串,會拋出錯誤。而 indexOf 和 lastIndexOf 這兩個方法,它們會將正則表達式轉換爲字串並搜尋它。

二、字串重複

repeat():返回新的字串,表示將字串重複指定次數返回。

console.log("Hello,".repeat(2));  // "Hello,Hello,"

1、如果參數是小數,向下取整

console.log("Hello,".repeat(3.2));  // "Hello,Hello,Hello

2、如果參數是 0 至 -1 之間的小數,會進行取整運算,0 至 -1 之間的小數取整得到 -0 ,等同於 repeat 零次

console.log("Hello,".repeat(-0.5));  // "" 

3、如果參數是 NaN,等同於 repeat 零次

console.log("Hello,".repeat(NaN));  // "" 

4、如果參數是負數或者 Infinity ,會報錯:

console.log("Hello,".repeat(-1));  
// RangeError: Invalid count value

console.log("Hello,".repeat(Infinity));  
// RangeError: Invalid count value

5、如果傳入的參數是字串,則會先將字串轉化爲數位

console.log("Hello,".repeat("hh")); // ""
console.log("Hello,".repeat("2"));  // "Hello,Hello,"

三、字串補全

  • padStart:返回新的字串,表示用參數字串從頭部(左側)補全原字串。
  • padEnd:返回新的字串,表示用參數字串從尾部(右側)補全原字串。

以上兩個方法接受兩個參數,第一個參數是指定生成的字串的最小長度,第二個參數是用來補全的字串。如果沒有指定第二個參數,預設用空格填充。

console.log("h".padStart(5,"o"));  // "ooooh"
console.log("h".padEnd(5,"o"));    // "hoooo"
console.log("h".padStart(5));      // "    h"

1、如果指定的長度小於或者等於原字串的長度,則返回原字串:

console.log("hello".padStart(5,"A"));  // "hello"

2、如果原字串加上補全字串長度大於指定長度,則截去超出位數的補全字串:

console.log("hello".padEnd(10,",world!"));  // "hello,worl"

常用於補全位數:

console.log("123".padStart(10,"0"));  // "0000000123"

四、消除字串空格

trimStart():消除字串頭部的空格

trimEnd():消除尾部的空格

除了空格鍵,這兩個方法對字串頭部(或尾部)的 tab 鍵、換行符等不可見的空白符號也有效。

瀏覽器還部署了額外的兩個方法,trimLeft()trimStart()的別名,trimRight()trimEnd()的別名。

五、其他

1、matchAll():返回一個正則表達式在當前字串的所有匹配

2、String.fromCodePoint() 

ES5 提供String.fromCharCode()方法,用於從 Unicode 碼點返回對應字元,但是這個方法不能識別碼點大於0xFFFF的字元。ES6 提供了String.fromCodePoint()方法,可以識別大於0xFFFF的字元,彌補了String.fromCharCode()方法的不足。在作用上,正好與下面 下麪的codePointAt()方法相反。

String.fromCodePoint(0x20BB7) // "