字符串的新增方法

String.fromCodePoint()

String.fromCharCode()方法不能识别码点大于0xFFFF的字符,String.fromCodePoint()方法弥补了上述方法的不足

注意:fromCodePoint方法定义在String对象上,而codePointAt方法定义在字符串的实例对象上。

String.raw()

该方法返回一个斜杠都被转义的字符串,如下

String.raw`Hi\\n`
// 返回 "Hi\\\\n"

String.raw`Hi\\n` === "Hi\\\\n" // true

String.raw()方法也可以作为一个正常的函数使用。第一个参数是一个具有raw属性的对象,,raw属性的值应该是一个数组

String.raw({ raw: 'test' }, 0, 1, 2);
// 't0e1s2t'

// 等同于
String.raw({ raw: ['t','e','s','t'] }, 0, 1, 2);

codePointAt()

对于四个字节的字符,JavaScript不能正确处理,但codePointAt()方法能正确处理4个字节存储的字符,返回一个字符的码点

let s = 'a';

s.codePointAt(0) // 134071
s.codePointAt(1) // 57271

s.codePointAt(2) // 97

这个方法返回的码点是十进制的,可以用toString()方法转化成十六进制的

let s = 'a';

s.codePointAt(0).toString(16) // "20bb7"
s.codePointAt(2).toString(16) // "61"

上面代码的字符串‘a’应该是在位置1的,但是必须向codePointAt()方法中传入2。可以用for...of循环解决问题。另外,也可以用扩展运算符(...)进行展开运算

let s = 'a';
for (let ch of s) {
  console.log(ch.codePointAt(0).toString(16));
}
// 20bb7
// 61

let arr = [...'a']; // arr.length === 2
arr.forEach(
  ch => console.log(ch.codePointAt(0).toString(16))
);
// 20bb7
// 61

可以用codePointAt()方法测试一个 字符由两个字节还是四个字节组成的。

function is32Bit(c) {
  return c.codePointAt(0) > 0xFFFF;
}

is32Bit("") // true
is32Bit("a") // false

normalize()

normalize()方法用来将字符的不同表示方法统一为同样的形式,这称为 Unicode 正规化。

normalize方法可以接受一个参数来指定normalize的方式,参数的四个可选值如下。

  • NFC,默认参数,表示“标准等价合成”,返回多个简单字符的合成字符。所谓“标准等价”指的是视觉和语义上的等价。
  • NFD,表示“标准等价分解”,即在标准等价的前提下,返回合成字符分解的多个简单字符。
  • NFKC,表示“兼容等价合成”,返回合成字符。所谓“兼容等价”指的是语义上存在等价,但视觉上不等价,比如“囍”和“喜喜”。(这只是用来举例,normalize方法不能识别中文。)
  • NFKD,表示“兼容等价分解”,即在兼容等价的前提下,返回合成字符分解的多个简单字符。

repeat()

这个方法返回一个字符串,表示将原字符串重复n次。如果参数是小数,则会被取整。参数是负数或者Infinity,会报错。

但是,如果参数是 0 到-1 之间的小数,则等同于 0,这是因为会先进行取整运算。

trimStart(),trimEnd()

trimStart()消除字符串头部的空格,trimEnd()消除尾部的空格

参考资料

阮一峰《ECMAScript 6 入门》

你可能感兴趣的:(字符串的新增方法)