在 js 中 String 对象是基本数据类型 string (称为 字符串 或 字符串字面量 或 模板字面量)的包装对象,称为字符串对象。String 对象提供了许多操作字符串相关的方法。

String 的属性&方法

属性

  • String.prototype.length: 只读属性,返回 String 的长度。

原型方法(实例方法)

字符串操作

  • String.prototype.concat(str1[, str2[, ...[, strN]]]]): 在原字符串之后连接一个或多个其他字符串,返回新的字符串。
  • String.prototype.repeat(countToRepeat): 返回一个将原字符串重复输出指定次数的新字符串。
  • String.prototype.slice(beginIndex[, endIndex]): 提取原字符串的一部分,作为一个新的字符串返回。
  • String.prototype.split([separator[, limit]]): 使用指定的分隔符将原字符串分割成字符串数组,返回这个字符串数组。
  • String.prototype.padStart(targetLength[, padString]): 用一个字符串填充当前字符串(如果需要的话则重复填充),返回填充后达到指定长度的新字符串。从当前字符串的左侧开始填充。
  • String.prototype.padEnd(targetLength[, padString]): 用一个字符串填充当前字符串(如果需要的话则重复填充),返回填充后达到指定长度的新字符串。从当前字符串的末尾(右侧)开始填充。
  • String.prototype.replace(regexp|substr, newSubStr|function): 返回一个将原字符串由替换值(replacement)替换部分或所有的模式(pattern)匹配项后的新字符串。
  • String.prototype.replaceAll(regexp|substr, newSubStr|function): 返回一个新字符串,新字符串将原字符串所有满足模式(pattern)的部分都已被替换值(replacement)替换。
  • String.prototype.toLowerCase(): 将字符串中的所有字符转换为小写形式,并返回新的字符串(如果调用该方法的值不是字符串类型会被强制转换)。
  • String.prototype.toUpperCase(): 将字符串中的所有字符转换为大写形式,并返回新的字符串(如果调用该方法的值不是字符串类型会被强制转换)。
  • String.prototype.trim(): 将字符串两端的空白字符(空格、tab以及所有行终止符字符如 LF、CR 等)清除,返回新的字符串。
  • String.prototype.trimStart(): 返回删除字符串开头的空白字符的新字符串,别名为 trimLeft()
  • String.prototype.trimEnd(): 返回删除字符串末尾的空白字符的新字符串,别名为 trimRight()
  • String.prototype.substring(beginIndex[, endIndex]): 返回字符串在开始索引到结束索引之间的一个子集,或从开始索引直到字符串的末尾的一个子集。
  • String.prototype.substr(beginIndex[, length]): 返回一个字符串中从指定位置开始到指定字符数的字符,该方法是 废弃的,不推荐使用,可以使用 substring() 替代。
  • String.prototype.normalize([form]): 按照指定的一种 Unicode 正规形式将当前字符串规范化。(如果该值不是字符串,则首先将其转换为一个字符串)。

搜索

  • String.prototype.indexOf(searchString[, fromIndex]): 给定一个要搜索的子字符串,从前往后搜索整个字符串,并返回指定子字符串第一次出现的索引。若给定第二个参数 fromIndex,该方法将返回指定子字符串在 fromIndex 之后第一次出现的索引。没有找到则返回 -1。
  • String.prototype.lastIndexOf(searchString[, fromIndex]): 给定一个要搜索的子字符串,从后往前搜索整个字符串,并返回指定子字符串第一次出现的索引。若给定第二个参数 fromIndex,该方法将返回指定子字符串在 fromIndex 之前第一次出现的索引。没有找到则返回 -1。
  • String.prototype.match(regexp): 检索返回一个字符串匹配正则表达式的结果。
  • String.prototype.matchAll(regexp): 返回一个包含所有匹配正则表达式的结果及分组捕获组的迭代器。
  • String.prototype.search(search): 执行正则表达式和字符串之间的一个搜索匹配,返回第一个匹配位置的索引。

判断

  • String.prototype.startsWith(searchString[, fromIndex]): 用来判断当前字符串是否以另外一个给定的子字符串开头。
  • String.prototype.endsWith(searchString[, fromIndex]): 用来判断当前字符串是否是以另外一个给定的子字符串结尾。
  • String.prototype.includes(searchString[, fromIndex]): 执行区分大小写的搜索,以确定字符串中是否可以找到要搜索的子字符串。

编码

  • String.prototype.at(index): 接受一个整数值,并返回一个新的字符串,该字符串由位于指定偏移量处的单个 UTF-16 码元组成。该方法允许正整数和负整数。负整数从字符串中的最后一个字符开始倒数。
  • String.prototype.charAt(index): 接受一个介于 0 和字符串长度减 1 之间的整数,并返回一个新的字符串。
  • String.prototype.charCodeAt(index): 返回 0 到 65535 之间的整数,表示给定索引处的 UTF-16 编码单元表示的 Unicode 码点,如果 Unicode 码点不能用一个 UTF-16 编码单元表示(因为它的值大于0xFFFF),则所返回的编码单元会是这个码点代理对的第一个编码单元。
  • String.prototype.codePointAt(index): 返回 一个 Unicode 编码点值的非负整数。
  • String.prototype.valueOf(): 返回字符串的原始值。
  • String.prototype.toString(): 返回一个字符串来表示这个对象,和 String.prototype.valueOf() 方法的返回值相同。

特定语言环境

  • String.prototype.localeCompare(compareString[, locales[, options]]): 返回一个数字来指示一个参考字符串是否在排序顺序前面或之后或与给定字符串位置相同。
  • String.prototype.toLocaleLowerCase([locale1[, locale2[, ...[, localeN]]]]): 根据任何指定区域语言环境设置的大小写映射,返回字符串被转换为小写的格式。
  • String.prototype.toLocaleUpperCase([locale1[, locale2[, ...[, localeN]]]]): 根据任何指定区域语言环境设置的大小写映射,返回字符串被转换为大写的格式。

静态方法

  • String.fromCharCode(num1[, ...[, numN]]): 返回由指定的 UTF-16 代码单元序列创建的字符串。
  • String.fromCodePoint(num1[, ...[, numN]]): 返回使用指定的代码点序列创建的字符串。
  • String.raw(callSite, ...substitutions): 用来获取一个模板字符串的原始字符串。可以通过:
    1
    String.raw`templateString`
    调用。

字符串字面量 和 字符串对象 的区别

字符串字面量 (通过单引号或双引号定义) 和 直接调用 String 方法 (没有通过 new 生成字符串对象实例) 的字符串都是基本字符串。JavaScript 会自动将基本字符串转换为字符串对象,只有将基本字符串转化为字符串对象之后才可以使用字符串对象的方法。当基本字符串需要调用一个字符串对象才有的方法或者查询值的时候 (基本字符串是没有这些方法的),JavaScript 会自动将基本字符串转化为字符串对象并且调用相应的方法或者执行查询。

1
2
3
4
5
const x = '字符串';
const y = String('字符串');
const z = new String('字符串');
console.log(x === y); // true
console.log(x === z); // false

部分中英文翻译对照参考

字符串基本类型(string primitives)
字符串字面量(string literals)
字符串对象(string objects)
模板字面量(template literals)