String.fromCodePoint() 和 String.fromCharCode()
用于从 Unicode 码点返回对应字符
JavaScript 内部,字符以 UTF-16 的格式储存,每个字符固定为2个字节
- String.fromCodePoint() ES6新方法,可以识别大于0xFFFF字符,若有多个参数,会合并成一个字符串返回
- String.fromCharCode() ES5方法,无法识别大于0xFFFF字符,若超出这回溢出,最高位会被舍弃
codePointAt() 和 charCodeAt()
- charCodeAt(): 无法处理Unicode 码点大于0xFFFF的字符;只能分别返回前两个字节和后两个字节的值。
- codePointAt() : 对于Unicode 码点大于0xFFFF的字符,能够正确处理 4 个字节储存的字符,返回一个字符的码点。方法返回的是码点的十进制值。会正确返回 32 位的 UTF-16 字符的码点。对于那些两个字节储存的常规字符,它的返回结果与charCodeAt()方法相同。
String.raw()
- 返回一个斜杠都被转义(即斜杠前面再加一个斜杠)的字符串,会将所有变量替换,而且对斜杠进行转义,往往用于模板字符串的处理方法;
若原字符串的斜杠已经转义,那么String.raw()会进行再次转义
String.raw`Hi\n${4+3}!`;
// 返回 "Hi\\n7!"
String.raw`Hi\\n`
// 返回 "Hi\\\\n"
String.raw`Hi\\n` === "Hi\\\\n" // true
- String.raw()方法作为正常的函数使用。它的第一个参数,应该是一个具有raw属性的对象,且raw属性的值应该是一个数组。
String.raw()实现代码
String.raw = function (strings, ...values) {
let output = '';
let index;
for (index = 0; index < values.length; index++) {
output += strings.raw[index] + values[index];
}
output += strings.raw[index]
return output;
}
String.raw({ raw: 'test' }, 0, 1, 2);
// 't0e1s2t'
indexOf ,includes(), startsWith(), endsWith()
- indexOf(): 来确定一个字符串是否包含在另一个字符串中, -1不存在;0,1存在
- includes():ES6,返回布尔值,表示是否找到了参数字符串。
- startsWith():ES6,返回布尔值,表示参数字符串是否在原字符串的头部。
- endsWith():ES6,返回布尔值,表示参数字符串是否在原字符串的尾部。
repeat()
返回一个新字符串,表示将原字符串重复n次
'a'.repeat(3) // "aaa"
'la'.repeat('la') // ""
'na'.repeat('3') // "nanana"
- 参数若是小数,则取整;0 到-1 之间的小数,则等同于 0
- 参数是负数或者Infinity,会报错
- 参数NaN等同于 0
- 如果repeat的参数是字符串,则会先转换成数字
padStart(),padEnd()
ES2017 引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全
- padStart() :头部补全;
- padEnd(): 尾部补全
第一个参数是字符串补全生效的最大长度,第二个参数是用来补全的字符串。
场景
- 原字符串的长度,等于或大于最大长度,则字符串补全不生效,返回原字符串;
- 用来补全的字符串与原字符串,两者的长度之和超过了最大长度,则会截去超出位数的补全字符串。
- 省略第二个参数,默认使用空格补全长度
用途
- 为数值补全指定位数
- 提示字符串格式
'1'.padStart(10, '0') // "0000000001"
'12'.padStart(10, 'YYYY-MM-DD') // "YYYY-MM-12"
'09-12'.padStart(10, 'YYYY-MM-DD') // "YYYY-09-12"
trimStart(),trimEnd()
ES2019, 返回的都是新字符串,不会修改原始字符串
- trimStart()消除字符串头部的空格;
- trimEnd()消除尾部的空格
matchAll()
返回一个正则表达式在当前字符串的所有匹配
网友评论