ES6学习系列——String 扩展

1、字符的 Unicode 表示法

JS中,可以使用 \uxxxx 来表示一个字符,而 xxxx 就是字符的unicode 码点,而一个码点就代表 2 个字节;

'\u0061' //'a'
//也就是说 0061 是字符 a 的Unicode 码点

在ES5 中,这种表示方法的码点在 [0000, FFFF] 区间内才能正确表示字符,也就是说超过了 \uFFFF 的字符要用 4 个字节才能正确表达; 但是在ES6 中提供了改进,也就是将码点放在大括号中就可以正确表示字符;
?点击去阮老师的《ECMAScript 6 入门》查看这个字符

'\uD842\uDFB7' // "?"
'\u{20BB7}' // "?"
2、str.codePointAt()

这个方法对应的是 ES5 中的 str.charCodeAt() ,传入的参数是 n ,返回 每2个字节的值(码点的十进制值);
不过ES5 的 str.charCodeAt()方法,不能正确处理四个字节储存的字符;

再来看看ES6 中的 str.codePointAt() 方法有什么不同:

let str = "?a"; //视为三个字符
str.codePointAt(0); //134071  ? 前两个字节的值
str.codePointAt(1); //57271  ? 后两个字节的值
str.codePointAt(2); //97     字符 a 的两个字节的值
这个方法可以用来测试一个字符是两个字节还是四个字节
function is32Bit(str){
  return str.codePointAt(0) > 0xFFFF;
}
is32Bit('a'); // false
is32Bit('?'); // true
3、String.fromCodePoint()

对应ES5 的String.fromCharCode() ,不过在ES5 中,不能正确处理超出0xFFFF 的码点;
ES6 提供String.fromCodePoint() 这个方法,刚好跟codePiontAt() 相反,可以传入码点,赶回返回对应的字符,也可以传入多个参数,会返回一个字符串;

String.fromCodePoint(0x20BB7); // "?"
String.fromCodePoint(0x78, 0x1f680, 0x79) === 'x\uD83D\uDE80y'  // true
4、str.at()

这个方法还是个提案,可以返回给定字符串的指定位置的字符,可以正确处理超出0xFFFF的码点的字符;
刚刚好补上了ES5 中 str.codeAt() 的缺点;

'?'.codeAt(0); // '\uD842'
'?'.at(0); // '?'
5、str.repeat()

传入一个num,返回一个新的字符串,将str 重复num 次;
如果num 是正小数,会向下取整,在(-1, 0] 区间内,则会取 0;
如果num 是 <= -1 的负数或者是Infinity 则会报错;
如果num 是NaN,则取 0;
如果传入的是一个字符串,则会将这个字符串先转成数字;

let str = 'ha';
str.repeat(0); // ' '
str.repeat(2); // 'haha'
str.repeat(3.3); //'hahaha'
str.repeat(-0.5); // ' '
str.repeat(-1); // RangeError
str.repeat(Infinity); // RangeError
str.repeat(NaN); // ' '
str.repeat('3'); // 'hahaha'
6、str.includes()、str.startsWith()、str.endsWith()

在ES5 中,只有str.indexOf() 来确定一个字符串里是否含有另一个字符串;
在ES6 中,提供新方法:
str.includes() :返回一个布尔值来表示字符串str 中是否存在存在参数字符串;
str.startsWith(): 返回一个布尔值来表示字符串str 的头部是否存在存在参数字符串;
str.endsWith(): 返回一个布尔值来表示字符串str 的尾部是否存在存在参数字符串;
三个方法都支持传入第二个参数num,来表示搜索的开始位置(包含num):

let str = 'abcdefg';
str.includes('bcd',1); // true
str.startsWith('fg',5); // true 这个方法的第二个参数表示的是在第num个到结束位置的字符中查找
str.endsWith('d',3); // false  这个方法的第二个参数表示的是在前num个字符中查找
7、str.padStart()、 str.padEnd()

这两个方法如名字所表示的,都用来补全字符串,接收连个参数: num 和 s ;
num 则表示补全后的字符串的长度,而参数 s 表示用什么字符来补(不传入s,则会用空格来填补);

let str = 'welcome';
str.padStart(8,'ddd'); //'dwelcome'
str.padStart(9,'ddd'); //'ddwelcome'
str.padStart(6,'ddd'); //'welcome'  num 小于原字符串的长度,直接返回原字符串
str.padEnd(8,'ddd'); //'welcomed'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值