1
0
mirror of https://github.com/ruanyf/es6tutorial.git synced 2025-05-25 19:22:21 +00:00
es6tutorial/docs/extension.md
2014-04-24 01:44:48 +08:00

73 lines
1.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 原生对象的扩展
ES6为String、Math、Number、String这几个原生对象添加了新的属性和方法。
## 字符串的codePointAt方法
JavaScript内部字符以UTF-16的格式储存每个字符固定为16字节。对于那些需要4个字节储存的字符Unicode编号大于0xFFFF的字符JavaScript会认为它们是两个字符。
```javascript
var s = "𠮷";
s.length // 2
s.charAt(0) // ''
s.charAt(1) // ''
s.charCodeAt(0) // 55362
s.charCodeAt(1) // 57271
```
上面代码说明对于4个字节储存的字符JavaScript不能正确处理。
ES6提供了codePointAt方法能够正确处理4个字节储存的字符返回一个字符的Unicode编号。
```javascript
var s = "𠮷a";
s.codePointAt(0) // 134071
s.codePointAt(1) // 97
s.charCodeAt(2) // 97
```
上面代码说明codePointAt方法的参数是字符在字符串中的位置。对于两个字节储存的字符它的返回结果与charCodeAt方法相同。
该方法是测试一个字符由两个字节还是由四个字节组成的最简单方法。
```javascript
function is32Bit(c) {
return c.codePointAt(0) > 0xFFFF;
}
is32Bit("𠮷") // true
is32Bit("a") // false
```
## String.fromCodePoint方法
该方法用于从Unicode编号返回对应的字符串作用与codePointAt正好相反。
```javascript
String.fromCodePoint(134071) // "𠮷"
```
注意fromCodePoint方法定义在String对象上而codePointAt方法定义在字符串的实例对象上。
## 二进制和八进制表示法
ES6提供了二进制和八进制数值的新的写法分别用前缀0b和0o表示。
```javascript
0b111110111 === 503 // true
0o767 === 503 // true
```