主要知識點:新增的字符串處理方法、模板字面量以及正則表達式上的改動正則表達式
codePointAt()方法數組
ES6 爲全面支持 UTF-16 而新增的方法之一是 codePointAt(
) ,它能夠在給定字符串中按位 置提取 Unicode
代碼點。該方法接受的是碼元位置而非字符位置,並返回一個整數值。函數
String.fromCodePoint()方法ui
可使用codePointAt()
來提取字符串內中某個字符的代碼點,也能夠藉助 String.fromCodePoint()
用給定的代碼點來產生包含單個字符的字符串spa
normalize()方法3d
Unicode 另外一個有趣之處是,不一樣的字符在排序或其它一些比較操做中可能會被認爲是相同 的。有兩種方式能夠定義這種關聯性:第一種是規範相等性(canonical equivalence ) , 意味着兩個代碼點序列在全部方面都被認爲是可互換的。例如,兩個字符的組合能夠按規範 等同於另外一個字符。第二種關聯性是兼容性(compatibility ) ,兩個兼容的代碼點序列看起 來有差異,但在特定條件下可互換使用。code
ES6 給字符串提供了** normalize()** 方法,以支持 Unicode 標準形式。所以,在比較字符時,能夠先將字符用同一種標準化方法,讓它們標準化,再進行比較,例如,比較字符數組中的大小:orm
let compare = function(values=[]){
values.sort((first,second)=>{
let firstNormalized = first.normalize();
let secondNormalized = second.normalize();
if (firstNormalized < secondNormalized) {
return -1;
} else if (firstNormalized === secondNormalized) {
return 0;
} else {
return 1;
}
})
}
let arr = ['a','z','c','g'];
compare(arr);
console.log(arr);//["a", "c", "g", "z"]
複製代碼
識別子字符串的方法cdn
爲了識別字符串是否存在於其餘字符串中,ES6提供了相應的方法來知足這類需求:blog
true
,不然會返回 false
;true
,不然返回 false
;true
,不然返回 false
。每一個方法都接受兩個參數:須要搜索的文本,以及可選的搜索起始位置索引。當提供了第二 個參數時, includes()
與 startsWith()
方法會從該索引位置開始嘗試匹配;當第二個參數未提供時, includes()
與 startsWith(
) 方法會從字符串起始處開始查找,而 endsWith()
方法則從尾部減去第二個參數後的位置做爲起始位置。
repeat()方法
ES6 還爲字符串添加了一個 repeat() 方法,它接受一個參數做爲字符串的重複次數,返回一個將初始字符串重複指定次數的新字符串。例如:
//repeat()方法
console.log('x'.repeat(3)); //xxx
console.log('hello world'.repeat(2)); //hello worldhello world
複製代碼
基本語法
模板字面量的最簡單語法,是使用反引號來包裹普通字符串,而不是用雙引號或單引號,例如:
//模板字面量
let message = `hello world`;
console.log(message); //hello world
console.log(typeof message); //string
console.log(message.length); //1
複製代碼
若想字符串中包含反引號,可使用反斜槓(\)
進行轉義便可:
let message = `\`hello world\``;
console.log(message); //`hello world`
複製代碼
多行字符串
使用模板字面量能夠輕鬆建立多行字符串,例如:
let message = `hello
world`;
console.log(message);
輸出:
hello
world
複製代碼
替換位
**替換位能夠嵌入到模板字面量中,替換位最終能夠轉換爲字符串的一部分輸出。替換位能夠是任意的js表達式。**替換位的語法採用 ${}
表示。
例如,替換位爲變量:
let msg = 'hello';
let message = `${msg} world`;
console.log(message); //hello world
複製代碼
替換位不單單能夠是簡單的變量,還能夠嵌入計算表達式、函數調用等,甚至還能夠將模板字面量做爲替換位嵌入到另外一個模板字面量中。
一個模板標籤(template tag ) 能對模板字面量進行轉換並返回最終的字符串值,標籤在模板的起始處被指定,即在第一個 ` 以前。例如:
let message = tag`Hello world`;
複製代碼
tag
就是會被應用到 Hello world
模板字面量上的模板標籤。
定義標籤
一個標籤(tag ) 僅是一個函數,它被調用時接收須要處理的模板字面量數據。標籤所接收的數據被劃分爲獨立片斷,而且必須將它們組合起來以建立結果。第一個參數是個數組,包含被 JS 解釋過的字面量字符串,隨後的參數是每一個替換位的解釋值。
標籤函數的參數通常定義爲剩餘參數形式,以便更容易處理數據,以下:
function tag(literals, ...substitutions) {
// 返回一個字符串
}
複製代碼
使用模板字面量中的原始值
模板標籤也能訪問字符串的原始信息,主要指的是能夠訪問字符在轉義以前的形式。獲取原始字符串值的最簡單方式是使用內置的 String.raw()
標籤。例如:
let message1 = `Multiline\nstring`,
message2 = String.raw`Multiline\nstring`;
console.log(message1); // "Multiline
// string"
console.log(message2); // "Multiline\nstring"
複製代碼
正則表達式u
標識:你可使用正則表達式來完成字符串的不少通用操做。但要記住,正則表達式假定單個字符使用一個 16 位的碼元來表示。爲了解決這個問題, ES6 爲正則表達式定義了用於處理Unicode 的 u
標誌。當一個正則表達式設置了 u
標誌時,它的工做模式將切換到針對字符,而不是針對碼元。
正則表達的y
標誌: y
標誌影響正則表達式搜索時的粘連( sticky
) 屬性,它表示從正則表達式的 lastIndex 屬性值的位置開始檢索字符串中的匹配字符。若是在該位置沒有匹配成功,那麼正則表達式將中止檢索;
複製正則表達式:使用RegExp構造器時容許使用第二個參數,而且讓它覆蓋第一個參數中的標誌;
flag屬性:ES6 新增了 flags 屬性用於配合 source 屬性,讓標誌的獲取變得更容易。例如:
var re = /ab/g;
console.log(re.source); // ab
console.log(re.flags); // g
複製代碼
本例查找了 re 的全部標誌並將其打印到控制檯,所用的代碼量要比 toString()
方式少得多。同時使用 source
和 flags
容許你直接提取正則表達式的組成部分,而沒必要將正則表達式轉換爲字符串。