1
0
mirror of https://github.com/ruanyf/es6tutorial.git synced 2025-05-26 03:32:20 +00:00

修改sting/u-modifier

This commit is contained in:
ruanyf 2014-11-22 21:23:57 +08:00
parent dc6437d0b2
commit 0ded650565

View File

@ -41,21 +41,6 @@ codePointAt方法是测试一个字符由两个字节还是由四个字节组成
```javascript
function is32Bit(c) {
return c.codePointAt(0) > 0xFFFF;
}
is32Bit("𠮷") // true
is32Bit("a") // false
```
## String.fromCodePoint方法
该方法用于从Unicode编号返回对应的字符串作用与codePointAt正好相反。
```javascript
String.fromCodePoint(134071) // "𠮷"
```
@ -100,9 +85,13 @@ ES6对这一点做出了改进只要将超过0xFFFF的编号放入大括号
ES6对正则表达式添加了u修饰符用来正确处理大于\uFFFF的Unicode字符。
**1点字符**
点(.)字符在正则表达式中,解释为除了换行以外的任意单个字符。对于大于\uFFFF的Unicode字符点字符不能识别必须加上u修饰符。
```javascript
var s = "𠮷";
大于\uFFFF的Unicode字符var s = "𠮷";
/^.$/.test(s) // false
/^.$/u.test(s) // true
@ -111,6 +100,46 @@ var s = "𠮷";
上面代码表示如果不添加u修饰符正则表达式就会认为字符串为两个字符从而匹配失败。
**2Unicode字符表示法**
ES6新增了使用大括号表示Unicode字符这种表示法在正则表达式中必须加上u修饰符才能识别。
```javascript
/\u{61}/.test('a') // false
/\u{61}/u.test('a') // true
/\u{20BB7}/u.test('𠮷') // true
```
上面代码表示如果不加u修饰符正则表达式无法识别\u{61}这种表示法只会认为这匹配属61个连续的u。
**3量词**
使用u修饰符后所有量词都会正确识别大于\uFFFF的Unicode字符。
```javascript
/a{2}/.test('aa') // true
/a{2}/u.test('aa') // true
/𠮷{2}/.test('𠮷𠮷') // false
/𠮷{2}/u.test('𠮷𠮷') // true
```
**4预定义模式**
u修饰符也影响到预定义模式正确识别大于\uFFFF的Unicode字符。
```javascript
/^\S$/.test('𠮷') // false
/^\S$/u.test('𠮷')
```
上面代码的`\S`是预定义模式匹配所有不是空格的字符。只有加了u修饰符它才能正确匹配大于\uFFFF的Unicode字符。
利用这一点,可以写出一个正确返回字符串长度的函数。
```javascript
@ -127,6 +156,19 @@ codePointLength(s) // 2
```
**5i修饰符**
有些Unicode字符的编码不同但是字型很相近比如\u004B与\u212A都是大写的K。
```javascript
/[a-z]/i.test('\u212A') // false
/[a-z]/iu.test('\u212A') // true
```
上面代码中不加u修饰符就无法识别非正规的K字符。
## contains(), startsWith(), endsWith()
传统上JavaScript只有indexOf方法可以用来确定一个字符串是否包含在另一个字符串中。ES6又提供了三种新方法。
@ -251,7 +293,7 @@ console.log(`${ x } + ${ y } = ${ x + y}`)
上面代码表示,在模板字符串中嵌入变量,需要将变量名写在${}之中。
模板字符串使得字符串与变量的结合,变得容易。下面是一个例子。
This article explains the effects of the u flag. It helps if youve read JavaScript has a Unicode problem first.
```javascript
if (x > MAX) {