以前用到字符串的方法时候,并不会深刻的去思考其中的原理,所以在es6新增的这些方法里就有点蒙圈了,于是想要搞清楚为什么会新增这些方法,以及如何使用这些方法。

在博客园上看见一篇大神SamWeb的总结,很是详细,讲解透彻,故,引用于此,望莫失莫忘。

地址: https://www.cnblogs.com/SamWeb/p/7091469.html

ES6字符串操作

 

  讨论字符串操作之前,我们先来了解一下Unicode 编码的由来,因为Js中的字符串就是一系列Unicode码的集合。

  我们都知道,世界上存在着各种各样的语言,汉语,英语,日语等,相对应的,也就存在各种各样的字符,如汉语就是对应我们博大精深的汉字,英语则对应着英文字符,各种不同的字符存在,也导致各国制定各自不同的标准,来使用字符存储在计算机上,如Ascii 码表,GBK表,这就导致了一个问题,各国之间的文件不能够交换使用,容易出现乱码问题。这时国际标准化组织就想把各国的字符都统一起来,把它们放到一张码表中,然后在这张表中,给每一个字符都分配一个数字,成为这个字符的唯一的标识符,由于每个字符都对应唯一的一个数字,所以不会出现冲突。这张表就是Unicode码表或Unicode编码字符集,这个数字又叫做码点(Code Point). 码表的样子如下

  通过这张表,我们可以看到字符和数字的一一对应关系。 丽 ---> 数字4E3D, 充 -----> 数字5145,  注意这里的数字都是用的16进制。

  想法是美好的,但是怎么落实到计算机中呢?怎么在计算中表示这些码点呢? 因为计算机中全是二进制,我们要用多少个字节来表示一个数字,这时出现了不同的实现方案,就是我们经常听说的UTF-8, UTF-16, UTF-32等, UTF-16 就是使用16个bit 位, 也就是两个字节来表示一个码点,这16个字节叫做代码单元(code unit),很明显这里有一个问题,两个字节的能够表示的最大数是65535, 如果码点超出了65535怎么处理? 比如码点134071, 那就用两个代码单元进行表示。

  Js 中对字符串的操作就是基于以上理论进行实现的,你可能还记得charCodeAt方法,它就是获取的代码单元

 <script>
let text = "

最新文章

  1. Sql判断不为Null也不为空的写法
  2. @html.ActionLink的几种参数格式
  3. 【SQL篇章】【SQL语句梳理 :--基于MySQL5.6】【已梳理:ALTER TABLE解析】
  4. Linux 网络编程详解二(socket创建流程、多进程版)
  5. 如何带领一个Android开发团队
  6. (转载)读取xml中的指定节点的值
  7. appdata文件夹有什么用途?C盘appdata可以删除吗?
  8. 用Delphi实现文件关联
  9. MR中的combiner和partitioner
  10. Google Reader的另一个开源的替代品Go Read
  11. java项目测试log4j
  12. hibernate 一对多操作(级联操作)
  13. SRM 583 Div II Level One:SwappingDigits
  14. Java学习笔记16(面向对象九:补充内容)
  15. IP地址与域名的关系
  16. 下拉菜单css
  17. JavaScript 高性能数组去重
  18. Zookeeper+Kafka完全分布式实战部署
  19. 疫苗:JAVA HASHMAP的死循环
  20. 20145325张梓靖 《网络对抗技术》 Web安全基础实践

热门文章

  1. HDU5950 Recursive sequence —— 矩阵快速幂
  2. win8.1 保护眼睛的颜色设置
  3. 自建 AppRTC
  4. Rsync+Inotify同步
  5. hdu 1028 &amp; hdu 1398 —— 整数划分(生成函数)
  6. docker 学习(四) springboot + docker
  7. mptcp文献汇总
  8. TypeScript完全解读(26课时)_1.TypeScript完全解读-开发环境搭建
  9. mysql添加DATETIME类型字段导致Invalid default value错误的问题
  10. C和FORTRAN的快速傅里叶/余弦/正弦变换(Fast Fourier/Cosine/Sine Transform)开源库分享