1.Unicode

在早期,由于存储空间宝贵,Unicode使用16位二进制来存储文字,将一个16位的二进制编码叫做一个码元(Code Unit).
由于技术的发展,Unicode对文字编码进行了扩展,将某些文字扩展到了32位(占用两个码元),并且,将某个文字对应的二进制数字叫做码点(Code Point).
ES6为了解决这个困扰,为字符串提供了方法:codePointAt(),根据字符串码元的位置得到其码点。同时ES6为正则表达式添加了一个flag:u,如果添加了该配置,则匹配时,使用码点匹配。

2.字符串API

  1. const text = "abcbdskwdjskjah"
  2. var result = text.includes("b",5);
  3. console.log(result);
  1. const text = "abcbdskwdjskjah"
  2. var result = text.startsWith("b",2);
  3. console.log(result);
  1. const text = "abcbdskwdjskjah"
  2. var result = text.endsWith("b",2);
  3. console.log(result);
  1. const text = "abcbdskwdjskjah"
  2. var result = text.repeat(5);
  3. console.log(result);

3.粘连标记

标记名 含义 y 匹配时,完全按照正则对象中的lastIndex位置开始匹配,并且匹配的位置必须在lastIndex位置。

  1. const text = "hello world"
  2. const reg = /w\w+/y;
  3. console.log(reg.lastIndex);
  4. console.log(reg.test(text));

4.模板字符串

ES6之前处理字符串繁琐的两个方面: 1.多行字符串 2.字符串拼接 ES6中提供了模板字符串的书写,可以方便的换行和字符串拼接

  1. const text = `我要换行,我要换行
  2. 我要换行,我要换行
  3. 我要换行,我要换行
  4. `
  5. console.log(text);
  1. const sk1 = "Python语言"
  2. const sk2 = "Java语言"
  3. var text = `我既学习了${sk1},又学习了${sk2}`
  4. console.log(text);
  1. const sk1 = "Python"
  2. const sk2 = "Java"
  3. var text = myTag`我既学习了${sk1},又学习了${sk2}`
  4. /**
  5. * myTag`我既学习了${sk1},又学习了${sk2}`相当于 text = myTag(["我既学习了","又学习了"],"Python","Java")
  6. */
  7. function myTag(parts,arg1,arg2){
  8. console.log(parts);
  9. console.log(arg1);
  10. console.log(arg2);
  11. console.log(Array.prototype.slice.apply(arguments).slice(1))
  12. console.log(arguments);
  13. }
  14. console.log(text);
  1. const text =String.raw`abc\nbcd`
  2. console.log(text);