1 字符串的Unicode表示法
ES6 只要将码点放入大括号,就能正确解读该字符;
var x = "\u20bb7";
document.write(x); //₻7
var x = "\u{20bb7}";
document.write(x); //? 可正确返回
2 codePointAt()
JavaScript对于那些需要4个字节储存的字符(Unicode码点大于0xFFFF的字符),JavaScript会认为它们是两个字符。
var s = "?";
s.length // 2
s.charAt(0) // ''
s.charAt(1) // ''
s.charCodeAt(0) // 55362
s.charCodeAt(1) // 57271
ES6提供了codePointAt方法,能够正确处理4个字节储存的字符,返回一个字符的码点。
var x = "\u{20bb7}";
console.log(x); //吉
console.log(x.length);
console.log(x.codePointAt(0)); //134071
console.log(x.codePointAt(0).toString(16)); //20bb7
console.log(x.codePointAt(1)); //57271
codePointAt(0)返回的是十进制码点;codePointAt(1)则返回的结果与charCodeAt方法返回的结果相同
3 String.fromCodePoint()
ES5提供String.fromCharCode方法,用于从码点返回对应字符,但是这个方法不能识别32位的UTF-16字符(Unicode编号大于0xFFFF)。
ES6提供了String.fromCodePoint方法,可以识别0xFFFF的字符,弥补了String.fromCharCode方法的不足。在作用上,正好与codePointAt方法相反。
console.log(String.fromCharCode("0x20bb7")); //ஷ
console.log(String.fromCodePoint("0x20bb7")); //吉
4 字符串的遍历器接口
ES6为字符串添加了遍历器接口,使得字符串可以被for...of循环遍历。
这个遍历器最大的优点是可以识别大于0xFFFF的码点
var text = String.fromCodePoint("0x20bb7"); //吉
for (let i = 0; i < text.length; i++) {
console.log(text[i]);
//�
//�
}
for (let codePoint of text) {
console.log(codePoint); //?
}
5 at()
ES7为字符串实例提供了at方法,可以识别Unicode编号大于0xFFFF的字符。
6 normalize()
ES6提供字符串实例的normalize()方法,用来将字符的不同表示方法统一为同样的形式,这称为Unicode正规化。
'\u01D1'.normalize() === '\u004F\u030C'.normalize()
// true
不过,normalize方法目前不能识别三个或三个以上字符的合成。
7 includes(),startsWith(),endsWith()
传统上,JavaScript只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中。ES6又提供了三种新方法。
includes():返回布尔值,表示是否找到了参数字符串。
startsWith():返回布尔值,表示参数字符串是否在源字符串的头部。
endsWith():返回布尔值,表示参数字符串是否在源字符串的尾部。
var str = "string";
console.log(str.includes("r")); //True
console.log(str.startsWith("str")); //True
console.log(str.endsWith("g")); //True
另外,他们都支持第二个参数用来表示开始搜索的位置,但endsWith针对的则是前n个字符
8 repeat()
repeat方法返回一个新字符串,表示将原字符串重复n次。
var str = "string";
console.log(str.repeat(2)); //stringstring
9 padStart(),padEnd()
padStart用于头部补全,padEnd用于尾部补全。
两个参数:1个是最小字符串长度;另一个是补全的字符串
10 模板字符串
模板字符串(template string)是增强版的字符串,用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。
var name = "Oliver"; //变量
var info = `hello world
welcome you`; //多行字符串
console.log(`hello ${name}`,info); //嵌套变量,输出多行字符串
变量应该写在${}
大括号里面,并且可以放入任意的JS表达式;
11 标签模板
下面的例子实际上是函数参数如下的调用:
tag(["Hello ", "; Infomation: ", ""],Oliver,welcome to use the system.);
tag函数写法如下:
let user = {
name: "Oliver",
info: "welcome to use the system."
};
tag`Hello ${user.name}; Infomation: ${user.info}`;
function tag(s, v1, v2) {
console.log(s); //["Hello ", "; Infomation: ", ""]
console.log(v1); //Oliver
console.log(v2); //welcome to use the system.
}
12 String.raw()
String.raw方法,往往用来充当模板字符串的处理函数,返回一个斜杠都被转义(即斜杠前面再加一个斜杠)的字符串,对应于替换变量后的模板字符串。
String.raw`Hi\n${2+3}!`;
// "Hi\\n5!"
String.raw`Hi\u000A!`;
// 'Hi\\u000A!'
String.raw方法也可以作为正常的函数使用。这时,它的第一个参数,应该是一个具有raw属性的对象,且raw属性的值应该是一个数组。
String.raw({ raw: 'test' }, 0, 1, 2);
// 't0e1s2t'
// 等同于
String.raw({ raw: ['t','e','s','t'] }, 0, 1, 2);
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。