字符串的新增方法
String.fromCodePoint()
ES5 提供了 fromCharCode() 方法,从 Unicode 码点返回对应字符,但是不能识别大于 0xFFFF 的字符。
console.log(String.fromCharCode(0x20BB7)); // "ஷ"
ES6 提供了 fromCodePoint(),可以识别大于 0xFFFF 的字符。
console.log(String.fromCodePoint(0x20BB7)); // "𠮷"
String.raw()
返回一个斜杠都被转义的字符串。
const str = String.raw`Hi\n${2 + 3}`;
console.log(str); // Hi\n5 <-- 不知道为什么 并没有将斜杠转义
略...
codePointAt()
const str = '𠮷a';
console.log(str.codePointAt(0).toString(16)); // 20bb7 <-- 𠮷
console.log(str.codePointAt(1).toString(16)); // dfb7
console.log(str.codePointAt(2).toString(16)); // 61 <-- a 位置识别不对
可使用 for...of 方法,正确识别 32 位的 UTF-16 字符。
for (let i of str) {
console.log(i.codePointAt(0).toString(16));
}
// 20bb7
// 61
判断一个字符是由两个字节还是四个字节组成。
function is32Bit(str) {
return str.codePointAt(0) > 0xFFFF;
}
console.log(is32Bit('𠮷')); // true
console.log(is32Bit('a')); // false
normalize()
略...
includes() startWith() endWith()
确定一个字符串中是否包含在另一个字符串中。
// ES5 中的方法
const str = 'Hello world!';
console.log(str.indexOf('world')); // 6
// ES6 新增
const str = 'Hello world!';
// 是否包含传入参数
console.log(str.includes('world')); // true
// 是否以传入参数开始
console.log(str.startsWith('world')); // false
console.log(str.startsWith('H')); // true
// 是否以传入参数结尾
console.log(str.endsWith('world')); // false
console.log(str.endsWith('world!')); // true
// 支持传入参数,表示搜索开始位置
console.log(str.includes('world', 7)); // false
console.log(str.startsWith('world', 6)); // true
console.log(str.endsWith('world!', 1)); // false
repeat()
返回一个新字符串,将原来的字符串重复 n 次。
const str = 'test';
console.log(str.repeat(2)); // testtest
// 如果是小数,会被取整
console.log(str.repeat(3.5)); // testtesttest
console.log(str.repeat(3.9)); // testtesttest
// 如果参数是 Infinity 或者 负数,会报错
console.log(str.repeat(-2)); // Uncaught RangeError: Invalid count valueat String.repeat
console.log(str.repeat(Infinity)); // Uncaught RangeError: Invalid count valueat String.repeat
// 如果是 -1 到 0 之间的,会被认为是0
console.log(str.repeat(-0.9)); // ''
// 参数 NaN 等同于 0
console.log(str.repeat(NaN)); // ''
// 参数是字符串,先转换为数字
console.log(str.repeat('repeat')); // ''
console.log(str.repeat('3')); // testtesttest
padStart() padEnd()
// 字符串不够长度,用字符在头部补全
const str = 'str';
console.log(str.padStart(5, 'abc')); // abstr
// 用字符在尾部补全
console.log(str.padEnd(7, 'abc')); // strabca
trimStart() trimEnd()
const str = ' trim ';
// 消除字符开头的空格
console.log(str.trimStart()); // 'trim '
// 消除字符结尾的空格
console.log(str.trimEnd()); // ' trim'
// trimStart 的别名
console.log(str.trimLeft()); // 'trim '
// trimEnd 的别名
console.log(str.trimRight()); // ' trim'