第2章 字符串和正則表達(dá)式
1.在ECMAScript6出現(xiàn)以前,JavaScript字符串一直基于16位字符編碼(UTF-16)進(jìn)行構(gòu)建.
2.新增了完全支持UTF-16的 codePointAt() 方法
這個(gè)方法接受編碼單元的位置而非字符位置作為參數(shù), 返回與字符串中給定位置對(duì)應(yīng)的碼位,即一個(gè)整數(shù)值
let text = '??';
console.log(text.codePointAt(0)); // 134071
3.和上面方法相反
使用String.fromCodePoint()方法根據(jù)指定的碼位生成一個(gè)字符
console.log(String.fromCodePoint(134071)); // '??'
4.字符串添加一個(gè)normalize()方法,它可以提供Unicode的標(biāo)準(zhǔn)化形式
方法接受一個(gè)可選參數(shù),指明應(yīng)用以下某種 Unicode 標(biāo)準(zhǔn)化形式: ('NFC', 'NFD', 'NFKC', 'NFKD')
如果開(kāi)發(fā)一款國(guó)際化的應(yīng)用,那么normalize()方法就有用得多了
注釋: 切記在進(jìn)行排序和比較操作前,將被操作字符串按照統(tǒng)一標(biāo)準(zhǔn)進(jìn)行標(biāo)準(zhǔn)化
5.正則表達(dá)式u修飾符
let text = '??';
console.log(text.length); // 2
console.log(/^.$/.test(text)); // false
console.log(/^.$/u.test(text)); // true
6.字符串中的子串識(shí)別
- includes(), 在字符串檢測(cè), 結(jié)果true/false
- startsWith(), 在字符串起始位置檢測(cè), 結(jié)果 true/false
- endsWith(), 在字符串結(jié)束位置檢測(cè), 結(jié)果 true/false
注釋: 以上方法不能處理傳入正則, 而舊方法indexOf(), lastIndexOf()把傳入的正則表達(dá)式轉(zhuǎn)化為一個(gè)字符串并搜索它.
7.repeat(), 參數(shù)number. 表示該字符串的重復(fù)次數(shù)
console.log('x'.repeat(3)); // 'xxx';
8.正則表達(dá)式 y 修飾符
- 它會(huì)影響正則表達(dá)式搜索過(guò)程中的 sticky 屬性, 它通知搜索從正則表達(dá)式的lastIndex屬性開(kāi)始進(jìn)行.
- 檢測(cè)y修飾符是否存在
let pattern = /hello\d/y
console.log(pattern.sticky); // true
9.正則表達(dá)是我的復(fù)制
- 在ECMAScript5中, 可以通過(guò)給RegExp構(gòu)造函數(shù)傳遞正則表達(dá)式作為參數(shù),來(lái)復(fù)制這個(gè)正則表達(dá)式
var re1 = /ab/i, re2 = new RegExp(re1); // 可以
re3 = new RegExp(re1, 'g'); // 在ES5中拋出錯(cuò)誤, 在ES6中正常運(yùn)行(可以通過(guò)第二個(gè)參數(shù)修改其修飾符)
10.flags 屬性
ES6中可以通過(guò)訪問(wèn)flags返回當(dāng)前正則表達(dá)式的修飾符字符串
let re = /ab/g;
console.log(re.source); // 'ab'
console.log(re.flags); // 'ab'
11.模板字面量
- 基本語(yǔ)法
let message = `hello world`;
- 多行字符串
ES5:
var message = "multiline \n
string"
ES6:
let message = `multiline
string`
注意點(diǎn): 在反撇號(hào)中的所以空白符都屬于字符串中的一部分
- 字符串占位
let name = 'hello';
message = `${name}, world`;
console.log(message); // hello, world