ES6字符串的新增方法---ES6学习笔记

1.String.fromCodePoint()

ES5中使用String.fromCharCode()方法,用于从Unicode码点返回字符,但是这个方法不能识别大于0xFFFF的码点。

   String.fromCharCode(0x20BB7);  //"ஷ"

上面的例子中String.fromCharCode()方法不能识别0x20BB7码点,发生了溢出,最高位2被舍弃,最后返回码点U+0BB7对应的字符,而不是码点U+20BB7对应的字符。

ES6提供了新的方法String.fromCodePoint(),用于完善String.fromCharCode()方法,String.fromCodePoint()方法可以识别大于0xFFFF的码点。

    String.fromCodePoint(0x20BB7);  //"𠮷"

上面的例子中,String.fromCodePoint()方法可以识别0x20BB7码点。

比较String.fromCodePoint()方法的作用正好与CodePointAt()方法的作用相反,前者用于从Unicode码点返回字符,后者用于从字符返回Unicode码点。


2.String.raw()

ES6为String对象提供了raw()方法,用于返回一个斜杠都被转义的字符串(即斜杠前面再加一个斜杠),常用于模板字符串的处理方法。

    String.raw`Hello \n World!`;  //"Hello \\n World!"

如果原字符串的斜杠已经被转义,那么String.raw()会进行再次转义。

   String.raw`Hello \\ world!`;  //"Hello \\\\ world!"

String.raw()本质上是一个正常的函数,只是专用于模板字符串的标签函数。如果写成正常函数的形式,它的第一个参数,应该是一个具有raw属性的对象,且raw属性的值应该是一个数组,对应模板字符串解析后的值。

  // `foo${1 + 2}bar`
  // 等同于
  String.raw({ raw: ['foo', 'bar'] }, 1 + 2) // "foo3bar"


3.实例方法:codePointAt()

JavaScript 内部,字符以 UTF-16 的格式储存,每个字符固定为2个字节。对于那些需要4个字节储存的字符(Unicode 码点大于0xFFFF的字符),JavaScript 会认为它们是两个字符。

charCodeAt()方法用于从字符返回Unicode码点(十进制),无法处理码点大于u0FFFF的字符。

   let str = "𠮷";
   
   str.length;  //2

   str.charCodeAt(0);  // 55362
   str.charCodeAt(1);  // 57271

注意:汉字“𠮷”的Unicode码点为0x20BB7
上面的例子中,由于汉字“𠮷”的Unicode码点大于0xFFFF,所以javascript会将它识别为两个字符,strlength值会被误判为2,charCodeAt()方法不能正确处理“𠮷”,只能分别返回它前两个字节的Unicode码点和后两个字节的Unicode码点。

注意: 码点大于u0FFFF的字符需要四个字节存储。

ES6提供了codePointAt()方法,它是定义在字符串的实例对象上,用于从字符串返回Unicode码点(十进制),它可以处理码点大于0xFFFF的字符(四个字节存储的字符)。

   let str = "𠮷a";
   
   str.codePointAt(0); //134071
   str.codePointAt(1); //57271
   str.codePointAt(2); //97

上面的例子,javascript会将"𠮷a"视为三个字符(6个字节),codePointAt可以正确处理"𠮷"字,所以str.codePointAt(0)返回"𠮷"字的十进制码点134071,即十六进制的0x20BB7,codePointAt处理的第二个字符是“𠮷”字的后两个字节,所以str.codePointAt(1)会返回“𠮷”字后两个字节的十进制码点57271,第三个字符是"a",str.codePointAt(2)返回字符"a"的十进制码点97。

注意:
1.如果处理的字符的码点小于0xFFFF,charCodeAtcodePointAt返回结果相同。
2.虽然codePointAt可以识别码点大于0xFFFF的字符,但是javascript会把码点大于0xFFFF的字符看作两个字符,这就会导致codePointAt方法的参数错误。

   let str = "𠮷a";
   str.codePointAt(0); //134071
   str.codePointAt(1); //57271
   str.codePointAt(2); //97

上面的例子中,字符"a"在codePointAt中对应的参数应该是1,但是codePointAt中的参数是2对应的字符才是“a”,处理这个问题,可是使用for…of,这是因为for…of可以识别码点大于0xFFFF的字符。

   let str = "𠮷a";
   for(let i of str){
       console.log(i.codePointAt(0));
   }
   //134071
   //97



返回结果转换为16进制:
codePointAt方法与charCodeAt方法返回的码点都是十进制的,如果想转换为十六进制,可以使用toString方法。

  let str = "𠮷";
  
  str.codePointAt(0);  //134071
  str.codePointAt(0).toString(16); //0x20BB7

实例: 使用codePointAt方法判断一个字符是由两个字节组成还是由四个字节组成

  function test(str){
      return str.codePointAt(0)>0xFFFF;
  }//如果是由四个字节组成返回true,否则返回false
  let s1 = "𠮷";
  let s2 = "a";
  test(s1);  //true
  test(s2);  //false


4.实例方法:includes()、startsWith()、endsWith()

javascript中只有indexof方法可以判断一个字符串是否包含在另一个字符串中。

ES6又提供了三种方法,includes,startsWith,endsWith,来判断一个字符串是否包含在另一个字符串中。

includes返回布尔值,判断一个字符串是否包含参数字符串。
startsWith返回布尔值,判断参数字符串是否在原字符串的头部。
endsWith返回布尔值,判断参数字符串是否在原字符串的尾部。

   let str = "abcdef";
   let str1 = "ab";
   let str2 = "ef";
   
   str.includes(str1);   //true
   str.startsWith(str1); //true
   str.endsWith(str2);   //true


5.实例方法:repeat()

ES6提供了repeat方法,返回一个新的字符串,表示重复几次原字符串。

  let str = "hello";
  str.repeat(2); //"hellohello"
  str.repeat(3); //"hellohellohello"

如果参数是小数,将对小数取整。

  let  str = "Hi";
  
  str.repeat(2.7);  //"HiHi"

如果参数是负数或者Infinity,将会报错。

  let str = "Hi";
  str.repeat(-2);         // RangeError
  str.repeat(Infinity);   // RangeError

但是如果参数是-1到0之间的小数,则等同于0,因为会先做取整运算,-1~0之间的小数取整会得到0.
  let str = "hello";
  str.repeat(-0.5);//""

如果参数是 NaN,也等同于0

如果参数是字符串,则会先转换为数值。



6.实例方法:padStart()、padEnd()

ES6提供了两个字符串补全方法
padStart方法用于头部补全。
padEnd方法用于尾部补全。

  let str = "s";
  str.padStart(5,"ab"); //"ababs"
  str.padEnd(5,"ab");   //"sabab"
  
  'x'.padStart(4, 'ab') // 'abax'

padStartpadEnd方法接受两个参数,第一个参数是补全生效的长度,第二个参数是用于补全的字符串。

如果省略了第二个参数,则默认使用空格补全。

  'x'.padStrart(5);//"    x"
  'x'.padEnd(5);   //"x    "


7.实例方法:trimStart()、trimEnd()

ES2019 提供了trimStart()trimEnd()两个方法,用于消除字符串中的空格。
trimStart()用于消除字符串开头的空格。
trimEnd()用于消除字符串结尾的空格。

  let str1 = "  x";
  let str2 = "abc   ";
  
  str1.trimLeft();//"x"
  str2.trimRight();//"abc"

trimLefttrimRight分别是trimStarttrimEnd的别名。

除了空格键,这两个方法对字符串头部(或尾部)的 tab 键、换行符等不可见的空白符号也有效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值