1.1 字符的Unicode表示法
javascript允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的Unicode码点,但是这种表示法只限于码点在\u0000~\uFFFF之间的字符。超出这个范围的字符,必须用两个双字节的形式表达,如:"\u0061"表示a,但如果表示为"\u20BB7",那么JavaScript会理解为\u20BB+7,此时由于\u20BB是一个不可打印字符,所以只会显示一个空格,后面跟个7。
ES6对这一点做出了改进,只要将码点放入大括号,就能正确解读该字符,如\u{1F680}==\uD83D\uDE80。
1.2 codePointAt()
ES6提供了codePointAt()方法,能够正确处理4个字节存储的字符,返回一个字符的码点
codePointAt方法返回的是码点的十进制,如果想要十六进制的值,可以使用tostring方法转换一下。
codePointAt方法是测试一个字符是由2个字节还是4个字节组成的最简单的方法。
问题:codeAt()、String.fromCodePoint()、charCodeAt()和codePointAt()三者的作用与区别?
chatAt()——提取指定字符串.
String.fromCodePoint() 静态方法返回使用指定的代码点序列创建的字符串。
charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。
codePointAt()——提取索引字符代码点.
codePointAt()方法返回一个 Unicode 编码点值的非负整数。
var s = '?a';
console.log(s.codePointAt(0));//134071
console.log(s.codePointAt(1).toString(16));//dfb7
console.log(s.charAt(0));//�
console.log(s.charCodeAt(0));//55362
1.3 String.fromCodePoint()
ES6提供了String.fromCodePoint方法,可以识别大于0xFFFF的字符。在作用上与codePointAt方法相反。
console.log(String.fromCodePoint(0x20BB7));//?
1.4 at()
由于charAt()方法不能识别码点大于0xFFFF的字符,所以ES6提出了at()方法。
1.5 normalize() 将字符的不同表示方法同一为同样的形式,称为Unicode正规化。
console.log('\u01D1'.normalize() === '\u004F\u030C'.normalize());//true
不过normalize目前不能识别3个或3个以上字符的合成。这种情况下,还是只能使用正则表达式,通过Unicode编号区间判断。
1.6 includes() startsWith() endsWith()
includes():返回布尔值,表示是否找到了参数字符串
startsWith():返回布尔值,表示参数字符串是否在源字符串的头部
endsWith():返回布尔值,表示参数字符串是否在源字符串的尾部
这三个方法都支持第二个参数,表示开始搜索的位置。
1.7 repeat()方法返回一个新字符串,表示将原字符串重复n次
console.log('x'.repeat(3));//xxx
1.8 padStart()、padEnd()
padStart()用于头部补全
console.log('x'.padStart(5,'ab'));//ababx
padEnd()用于尾部补全
1.9 模板字符串``
如果在模板字符串中需要引用反引号,则在其前面要用反斜杠\转义。
var greeting = `\`Yo\`World!`;
console.log(greeting);//`Yo`World!
trim()方法消除换行
var no =`
<ul>
<li><li>
</ul>
`.trim();
console.log(no);
/*<ul>
<li><li>
</ul> */
扩展运算符( spread )是三个点(…)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。
function tag(stringArr,...value){
console.log(...value);//Array(4) [1, 2, 3, 4]
}
tag('okk',[1,2,3,4]);//1 2 3
console.log(...[1, 2, 3])//1 2 3