ES6裡關於字串的擴充

weixin_33686714發表於2017-11-20

一、子串識別

  自從 JS 引入了 indexOf() 方法,開發者們就使用它來識別字串是否存在於其它字串中。ES6 包含了以下三個方法來滿足這類需求:

1、includes():該方法在給定文字存在於字串中的任意位置時會返回 true ,否則返回false

2、startsWith():該方法在給定文字出現在字串起始處時返回 true ,否則返回 false

3、endsWith():該方法在給定文字出現在字串結尾處時返回 true ,否則返回 false 

  以上每個方法都接受兩個引數:需要搜尋的文字,以及可選的搜尋起始位置索引

  (1)當提供了第二個引數(假設為n)時, includes() 與 startsWith() 方法會從該索引位置(n)開始嘗試匹配;而endsWith() 方法則從字串長度減去這個索引值的位置開始嘗試匹配

  (2)當第二個引數未提供時, includes() 與 startsWith() 方法會從字串起始處開始查詢,而 endsWith() 方法則從尾部開始。實際上,第二個引數減少了搜尋字串的次數

  雖然這三個方法使得判斷子字串是否存在變得更容易,但它們只返回了一個布林值(做判斷的時候比較好用)。若需要找到它們在字串中的確切位置,則需要使用indexOf() 和 lastIndexOf() 

  注意:如果向 startsWith() 、 endsWith() 或 includes() 方法傳入了正規表示式而不是字串,會丟擲錯誤。而對於indexOf()和lastIndexOf()這兩個方法,它們會將正規表示式轉換為字串並搜尋它。

二、字串重複

  ES6為字串新增了一個 repeat() 方法,它接受一個引數作為字串的重複次數,返回一個將初始字串重複指定次數的新字串

"abc".repeat(4)   // "abcabcabcabc"

  引數如果是小數,會被取整;如果repeat的引數是負數或者Infinity,會報錯。

//如果引數是0到-1之間的小數,則等同於0,這是因為會先進行取整運算。0到-1之間的小數,取整以後等於-0,repeat視同為0
console.log('na'.repeat(-0.9)); // ""

//引數NaN等同於0
console.log('na'.repeat(NaN)); // ""

//如果repeat的引數是字串,則會先轉換成數字
console.log('na'.repeat('na')); // ""
console.log('na'.repeat('3'));  // "nanana"

  建立縮排級別:此方法比相同目的的其餘方法更加方便,在操縱文字時特別有用,尤其是在需要產生縮排的程式碼格式化工具中

// 縮排指定數量的空格
var indent = " ".repeat(4),
indentLevel = 0;

// 需要增加縮排時
var newIndent = indent.repeat(++indentLevel);

//呼叫第一個repeat()方法建立了一個包含四個空格的字串,indentLevel變數用來持續追蹤縮排的級別。此後,可以通過增加indentLevel的值來呼叫repeat() 方法,從而改變空格數量

三、字串補全

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

1、padStart():頭部補全

2、padEnd():尾部補全

  padStart()padEnd()一共接受兩個引數,第一個引數用來指定字串的最小長度,第二個引數是用來補全的字串

'x'.padStart(5, 'ab') // 'ababx'
'x'.padStart(4, 'ab') // 'abax'

'x'.padEnd(5, 'ab') // 'xabab'
'x'.padEnd(4, 'ab') // 'xaba'
//如果省略第二個引數,預設使用空格補全長度
'x'.padStart(4) // '   x'
'x'.padEnd(4) // 'x   '

//如果原字串的長度,等於或大於指定的最小長度,則返回原字串
'xxx'.padStart(2, 'ab') // 'xxx'
'xxx'.padEnd(2, 'ab') // 'xxx'

//如果用來補全的字串與原字串,兩者的長度之和超過了指定的最小長度,則會截去超出位數的補全字串
'abc'.padStart(10, '0123456789')// '0123456abc'

  應用:

//padStart的常見用途是為數值補全指定位數。下面程式碼生成10位的數值字串
'1'.padStart(10, '0') // "0000000001"
'12'.padStart(10, '0') // "0000000012"
'123456'.padStart(10, '0') // "0000123456"

//另一個用途是提示字串格式
'12'.padStart(10, 'YYYY-MM-DD') // "YYYY-MM-12"
'09-12'.padStart(10, 'YYYY-MM-DD') // "YYYY-09-12"

 

相關文章