字符串相关

原生

charAt()

  • 返回给定索引位置的字符。

  • 友情提示,索引从0开始的。

let msg = "abcd";
console.log(msg.charAt(2)); // "c"

charCodeAt()

  • 查看指定码元的字符编码。

如果想把很多的字符都正确的转换为对应的码点,那可以使用 codePointAt()

let msg = "abcd";
console.log(msg.charCodeAt(2)); // 99

codePointAt()

  • 接收 16 位码元的索引并返回该索引位置上的码点。

下面的是将 “ab😊d” 字符串转换为字符编码,对比了 charAt()、charCodeAt()、codePointAt(),后面两个可以把这个字符串转化为对应的字符编码,但 charAt() 不行。

这里要注意:不能输成 “ab☺d”,这玩意上面三个都能实现。

但《JavaScript高级开发》第四版上说 charCodeAt() 不行,猜测可能是浏览器进行了设置。

let msg = "ab😊d";
console.log(msg.charAt(0)); // a
console.log(msg.charAt(1)); // b
console.log(msg.charAt(2)); // ?
console.log(msg.charAt(3)); // ?
console.log(msg.charAt(4)); // e


console.log(msg.charCodeAt(0)); // 97
console.log(msg.charCodeAt(1)); // 98
console.log(msg.charCodeAt(2)); // 55357
console.log(msg.charCodeAt(3)); // 56842
console.log(msg.charCodeAt(4)); // 100


console.log(msg.codePointAt(0)); // 97
console.log(msg.codePointAt(1)); // 98
console.log(msg.codePointAt(2)); // 55357
console.log(msg.codePointAt(3)); // 56842
console.log(msg.codePointAt(4)); // 100

fromCharCode()

  • 根据给定的 UTF-16 码点返回对应字符。
  • 可以接收多个值,将其拼接成一个字符串。

如果想把很多的码点都正确的转换为对应的字符,那可以使用 fromCodePoint()

console.log(String.fromCharCode(0x61, 0x62, 0x63, 0x64)); // "abcd"

fromCodePoint()

  • 接收任意的码点,返回对应字符。
  • 可以接收多个值,将其拼接成一个字符串。
console.log(String.fromCharCode(97, 98, 55357, 56842, 100)); // ab😊d
console.log(String.fromCodePoint(97, 98, 128522, 100)); // ab😊d

normalize()

  • 4种”NFD”、”NFC”、”NFKD”或”NFKC”。
// 未使用规范
let a1 = String.fromCharCode(0x00C5),
a2 = String.fromCharCode(0x212B),
a3 = String.fromCharCode(0x0041, 0x030A);
// U+00C5 是对 0+212B 进行 NFC/NFKC 规范化之后的结果
console.log(a1 === a1.normalize("NFD")); // false
console.log(a1 === a1.normalize("NFC")); // true
console.log(a1 === a1.normalize("NFKD")); // false
console.log(a1 === a1.normalize("NFKC")); // true
// U+212B 是未规范化的
console.log(a2 === a2.normalize("NFD")); // false
console.log(a2 === a2.normalize("NFC")); // false
console.log(a2 === a2.normalize("NFKD")); // false
console.log(a2 === a2.normalize("NFKC")); // false
// U+0041/U+030A 是对 0+212B 进行 NFD/NFKD 规范化之后的结果
console.log(a3 === a3.normalize("NFD")); // true
console.log(a3 === a3.normalize("NFC")); // false
console.log(a3 === a3.normalize("NFKD")); // true
console.log(a3 === a3.normalize("NFKC")); // false


// 使用规范
let a1 = String.fromCharCode(0x00C5),
a2 = String.fromCharCode(0x212B),
a3 = String.fromCharCode(0x0041, 0x030A);
console.log(a1.normalize("NFD") === a2.normalize("NFD")); // true
console.log(a2.normalize("NFKC") === a3.normalize("NFKC")); // true
console.log(a1.normalize("NFC") === a3.normalize("NFC")); // true

concat()

  • 将一个或多个字符串拼接成一个新字符串。
  • 接收一或两个参数,省略第二个参数都意味着提取到字符串末尾。
  • 不修改原数据。

slice()

  • 从字符串中提取子字符串。
  • 接收一或两个参数,省略第二个参数都意味着提取到字符串末尾。
  • 不修改原数据。
  • 将所有负值参数都当成字符串长度加上负参数值。

substr()

  • 从字符串中提取子字符串。
  • 接收一或两个参数,省略第二个参数都意味着提取到字符串末尾。
  • 不修改原数据。
  • 将第一个负参数值当成字符串长度加上该值,将第二个负参数值转换为 0。

substring()

  • 从字符串中提取子字符串。
  • 接收一或两个参数,省略第二个参数都意味着提取到字符串末尾。
  • 不修改原数据。
  • 将所有负值参数都当成字符串长度加上负参数值。

indexOf()

  • 从字符串开头开始查找子字符串,并返回位置(如果没找到,则返回-1)。

lastIndexOf()

  • 从字符串末尾开始查找子字符串,并返回位置(如果没找到,则返回-1)。

startsWith()

  • 检测字符串中是否包含另一个字符串。
  • 从字符串中搜索传入的字符串,并返回一个表示是否包含的布尔值。
  • 可选的第二个参数,表示开始搜索的位置。则指:从指定位置向着字符串末尾搜索。
const msg = "foobarbaz";
console.log(msg.startsWith("foo")); // true
console.log(msg.startsWith("bar")); // false
console.log(msg.startsWith("foo", 1)); // false

endsWith()

  • 检测字符串中是否包含另一个字符串。
  • 从字符串中搜索传入的字符串,并返回一个表示是否包含的布尔值。
  • 可选的第二个参数,表示应该当作字符串末尾的位置。如
const msg = "foobarbaz";
console.log(msg.endsWith("baz")); // true
console.log(msg.endsWith("bar")); // false
console.log(message.endsWith("bar", 6)); // true

includes()

  • 检测字符串中是否包含另一个字符串。
  • 从字符串中搜索传入的字符串,并返回一个表示是否包含的布尔值。
  • 可选的第二个参数,表示开始搜索的位置。则指:从指定位置向着字符串末尾搜索。
const msg = "foobarbaz";
console.log(msg.includes("bar")); // true
console.log(msg.includes("aaa")); // false
console.log(msg.includes("bar", 4)); // false

trim()

  • 删除前、后所有空格符,再返回结果。
const msg = "    hello     ";
console.log(msg.trim()) // "hello"

trimLeft() 和 trimRight()方法分别用于从字符串开始和末尾清理空格符。

repeat()

  • 接收一个整数参数,将字符串复制多少次,然后返回拼接所有副本后的结果。
const msg = "hello";
console.log(msg.repeat(5)) // "hellohellohellohellohello"

padStart() 和 padEnd()

  • 复制字符串,如果小于指定长度,则在相应一边填充字符,直至满足长度条件。
  • 第一个参数是长度,第二个参数是可选的填充字符串,默认为空格。

浏览器上没效果。

toLowerCase()、toLocaleLowerCase()、toUpperCase()和toLocaleUpperCase()

  • toLocaleLowerCase()和 toLocaleUpperCase()方法旨在基于特定地区实现。在不知道代码设计什么语言时使用。

localeCompare()

  • 比较两个字符串。
  • 相等返回0,字符串比字符串参数小返回-1,字符串比字符串参数大返回1。
let stringValue = "yellow"; 
console.log(stringValue.localeCompare("brick")); // 1
console.log(stringValue.localeCompare("yellow")); // 0
console.log(stringValue.localeCompare("zoo")); // -1