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 worldwelcome 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); //Oliverconsole.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);

ECMAScript6 新特性——“字符串的扩展”相关推荐

  1. ES9新特性_ES9正则扩展-命名捕获分组---JavaScript_ECMAScript_ES6-ES11新特性工作笔记054

    然后我们再看一下es9中对,js的正则的扩展 我们有上面这个str字符串,我们想得到,url和标签中的内容尚硅谷 然后我们写了上面的正则 然后执行这个reg,然后打印结果. 去看一下结果是个数组,0下 ...

  2. ES9新特性_ES9正则扩展-dotAll模式---JavaScript_ECMAScript_ES6-ES11新特性工作笔记056

    然后我们再来看一下这个,es9中对,正则表达式的扩展 dotAll的模式. 首先我们有这样的文本,一个<ul>,这样 然后我们要从里面获取a标签里面的内容,比如和上映日期. 可以看到上面这 ...

  3. ES9新特性_ES9正则扩展-反向断言---JavaScript_ECMAScript_ES6-ES11新特性工作笔记055

    然后我们再来看,正则表达式中es9中的,这个 反向断言. 可以看到,我们这里用了个?=啦,这个是什么意思,就是说我们根据,?=啦 就是匹配啦前面是不是数字. 可以看到结果右边.这叫做正向断言,就是通过 ...

  4. JavaScript6、7、8、9、10、11新特性

    目录 1.ECMAScript6新特性 1.1.let 关键字 1.1.1.不允许重复声明 1.1.2.块级作用域 1.1.3.不存在变量提升 1.1.4.不影响作用域链 1.2.const 关键字 ...

  5. 七、JavaScript新特性

    7.1.ECMAScript6新特性 7.1.1.关键字 1.let关键字 不允许重复声明 块儿级作用域 不存在变量提升 不影响作用域链 2.const关键字 不允许重复声明 块儿级作用域 声明必须赋 ...

  6. C# 8.0的三个令人兴奋的新特性

    C# 语言是在2000发布的,至今已正式发布了7个版本,每个版本都包含了许多令人兴奋的新特性和功能更新.同时,C# 每个版本的发布都与同时期的 Visual Studio 以及 .NET 运行时版本高 ...

  7. C# 8.0的三个令人兴奋的新特性 1

    C# 语言是在2000发布的,至今已正式发布了7个版本,每个版本都包含了许多令人兴奋的新特性和功能更新.同时,C# 每个版本的发布都与同时期的 Visual Studio 以及 .NET 运行时版本高 ...

  8. Java春招面试复习:JDK 5-15都有哪些经典新特性

    前言 JDK 15发布啦~ 我们一起回顾JDK 5-15 的新特性吧,大家一起学习哈~ 本文已经收录到github https://github.com/whx123/JavaHome 公众号:捡田螺 ...

  9. C++11新特性(原封不动转载待查)

    C++11标准发布已有一段时间了, 维基百科上有对C++11新标准的变化和C++11新特性介绍的文章. 我是一名C++程序员,非常想了解一下C++11. 英文版的维基百科看起来非常费劲,而中文版维基百 ...

最新文章

  1. 迭代器、生成器、面向过程编程思想
  2. 使用IntelliJ IDEA开发SpringMVC网站(一)开发环境
  3. python-virtualenv虚拟环境的使用
  4. R语言实战应用精讲50篇(二)-多重线性回归系列之稳健回归
  5. 2-Second Scrum Meeting-20151202
  6. c语言中open函数r,C语言中open函数
  7. ORACLE TRUNC()函数
  8. 面试题·HashMap和Hashtable的区别(转载再整理)
  9. 最新计算机二级c语言程序设计题库,计算机二级C语言编程题库(100题
  10. 关于二进制转换为十六进制
  11. mysqldump set-gtid-purged=OFF的问题
  12. hugo搭建个人博客
  13. 阿里云centos7.0安装java环境
  14. 佳能无线打印机服务器,佳能LBP6018W打印机WIFI无线打印心得分享
  15. 交流电压电流取样电路
  16. 字幕时间轴制作(2)
  17. 人体行为识别特征点提取 综述很全面
  18. 汽车信息安全系列-3.TI HSM笔记(更新中)
  19. Python统计《红楼梦》人物出现频率
  20. gcc/g++ 编译C/C++代码

热门文章

  1. Java循环案例-银行存钱问题
  2. laydate组件 无法传值_Vue组件通信的几种方式
  3. 计算机视觉与深度学习 | 开源SLAM、视觉里程计综述(SLAM、Visual Odometry)
  4. 富士通服务器安装操作系统,富士通平板u盘安装系统教程
  5. php读取配置文件连接mysql数据库,MySQL教程--通过配置文件连接数据库操作详解
  6. html5和前端精要(5)-基于python脚本(2)
  7. python3精要(48)-os命令
  8. 【Python】如何用Python实现Word文档拆分
  9. 高等数学回顾.pptx
  10. 【CV】一文看懂目标检测神器YOLO5