字符串的新增方法

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'
Last Updated: 5/9/2019, 7:16:43 PM