ECMAScript6入门学习笔记(二)

3、字符串的扩展

ES6加强了对Unicode的支持,并且扩展了字符串的对象。

codePointAt方法

在JavaScript中,字符以UTF-16的格式存储,每个字符固定为2个字节。对于4个字节存储的字符,JavaScript不能正确处理,字符串长度会被误判为2。而且charAt方法无法读取到字符,charCodeAt方法只能分别返回前两个字节和后两个自己的值。

ES6提供了codePointAt方法,能够正确处理4个字节存储的字符,返回一个字符的Unicode编号。

codePointAt方法是测试一个字符有两个字节还是4个字节组成最简单的方法。

function is32Bit(c) {
    return c.codePointAt(0) > 0xFFFF;
}

is32Bit("?") // true
is32Bit("a") // false

String.fromCodePoint方法

该方法用于从Unicode编号返回对应的字符串,作用与codePointAt正好相反。

String.fromCodePoint(134071) //"?"

注意:fromCodePoint方法定义在String对象上,而codePointAt方法定义在字符串的实例对象上。

字符的Unicode表示法

JavaScript允许采用“\uxxxx”形式表示一个字符,其中“xxxx”表示字符的Unicode编号。

"\u0061"
//"a"

但是,这种表示方法只限于\u0000--\uFFFF之间的字符。超出这个范围必须用双字节的形式表达。

"\uD842\uDFB7"
//"?"

ES6针对这一问题做出了改进,只要将超过0xFFFF的编号放入大括号,就能的得到正确解读。

"\u{20BB7}"
//"?"

contains(),startsWith(), endsWith()

contains():返回布尔值,表示是否找到了参数字符串。

startsWith():返回布尔值,表示参数字符串是否在源字符串的头部。

endsWith():返回布尔值,表示参数字符串是否在源字符串的尾部。

var s = "Hello world!";

s.startsWith("Hello") //true
s.endsWith("!") //true
s.contains("o") //true

这三个方法都支持第二个参数,表示开始搜索的位置。

var s = "Hello world!";

s.startsWith("o", 4) //true
s.endsWith("o", 8) //true
s.contains("o", 8) //false

repeat()

repeat()返回一个新字符串,表示将源字符串重复n次。

"x".repeat(3)  //"xxx"
"hello".repeat(2)  //"hellohello"

模板字符串

模板字符串是增强版的字符串,用反引号(`)标识。他可以当做普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。

//普通字符串
`In Javascript '' is a line-feed`

//多行字符串
`In Javascript this is 
not legal.`

//字符串中嵌入变量
var name = "Bob", time = "today";
`Hello ${name}, how are you ${time}?`

var x = 1;
var y = 2;
console.log(`${x} + ${y} = ${x+y}`) //"1+2=3"

在模板中嵌入变量需要将变量名写入${}中。

4、数值的拓展

二进制和八进制数值表示法

ES6提供了二进制和八进制数值的新写法,分别用前缀0b和0o表示。

0b111110111 === 503  //true
0o767 === 503  //true

八进制用0o前缀表示的方法,将要取代已经在ES5中逐步淘汰的加前缀0的写法。

Number.isFinite(),Number.isNaN()

ES6在Number对象上,新提供了Number.isFinite()和Number.isNaN()两个方法,用来检查Infinite和NaN这两种特殊值。

它们与传统的isFinite()和isNaN()的区别在于,传统方法先调用Number()将非数值的值转为数值,在进行判断,而这种新方法只对数值有效,对于非数值一律返回false。

isFinite(25) //true
isFinite("25")  //true
Number.isFinite(25)  //true
Number.isFinite("25")  //false

isNaN(NaN)  //true
isNaN("NaN")  //true
Number.isNaN(NaN)  //true
Number.isNaN("NaN")  //false

Number.parseInt(),Number.parseFloat()

ES6将全局方法parseInt()和parseFloat(),移植到了Number对象上面,行为保持不变。

这样做的目的是逐渐减少全局方法,是语言逐步模块化。

Number.isInteger()和安全整数

Number.isInteger()用来判断一个值是否为整数。注意的是,在JavaScript内部,整数和浮点数使用同样的存储方式,所以3和3.0被视为同一个值。

Number.isInteger(25) //true
Number.isInteger(25.0)  //true
Number.isInteger(25.1)  //false

JavaScript能够准确表示的整数范围为-^{}^{2}53 ~^{2}53。ES6引入了Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER这两个常量,用来表示这个范围的上下限。Number.isSafeInteger()则用来判断一个整数是否在这个范围内。

var inside = Number.MAX_SAFE_INTEGER;
var outside = inside + 1;
Number.isInteger(inside) //true
Number.isSafeInteger(inside) //true
Number.isInteger(outside) //true
Number.isSafeInteger(outside) //false

Math对象的拓展

Math.trunc()用于去除一个数的小数部分,返回七整数部分。

ES6在math对象上提供了许多新的方法

Math.acosh(x),Math.asinh(x)......

你可能感兴趣的:(web前端开发)