String.prototype.substr()

已弃用:此特性不再推荐。虽然某些浏览器可能仍然支持它,但它可能已经从相关的网络标准中删除,可能正在删除过程中,或者可能仅为兼容性目的而保留。请避免使用它,如果可能,请更新现有代码;请参阅本页底部的兼容性表格以指导您的决策。请注意,此特性可能随时停止工作。

substr() 方法用于从字符串中提取一部分,从指定索引开始,并包含指定的后续字符数。

注意: substr() 不是 ECMAScript 规范的一部分,而是定义在 Annex B:浏览器附加的 ECMAScript 功能 中,对于非浏览器环境,它是可选的。因此,建议使用标准的 String.prototype.substring()String.prototype.slice() 方法,以使您的代码具有最大的跨平台兼容性。在 String.prototype.substring() 页面 上有一些这三种方法的比较。

试一试

const str = "Mozilla";

console.log(str.substr(1, 2));
// Expected output: "oz"

console.log(str.substr(2));
// Expected output: "zilla"

语法

js
substr(start)
substr(start, length)

参数

start

要包含在返回的子字符串中的第一个字符的索引。

length 可选

要提取的字符数。

返回值

一个包含给定字符串指定部分的新字符串。

描述

字符串的 substr() 方法从字符串中提取 length 个字符,从 start 索引开始计数。

  • 如果 start >= str.length,则返回一个空字符串。
  • 如果 start < 0,则索引从字符串末尾开始计数。更正式地说,在这种情况下,子字符串从 max(start + str.length, 0) 开始。
  • 如果省略 start 或其值为 undefined,则将其视为 0
  • 如果省略 length 或其值为 undefined,或者如果 start + length >= str.length,则 substr() 会提取到字符串的末尾。
  • 如果 length < 0,则返回一个空字符串。
  • 对于 startlengthNaN 都被视为 0

尽管不鼓励使用 substr(),但在遗留代码中,没有简单的方法可以将其迁移到 slice()substring(),而不实际上为 substr() 编写一个 polyfill。例如,当 str = "01234", a = 1, l = -2 时,str.substr(a, l)str.slice(a, a + l)str.substring(a, a + l) 的结果都不同——substr() 返回一个空字符串,slice() 返回 "123",而 substring() 返回 "0"。实际的重构路径取决于对 al 范围的了解。

示例

使用 substr()

js
const string = "Mozilla";

console.log(string.substr(0, 1)); // 'M'
console.log(string.substr(1, 0)); // ''
console.log(string.substr(-1, 1)); // 'a'
console.log(string.substr(1, -1)); // ''
console.log(string.substr(-3)); // 'lla'
console.log(string.substr(1)); // 'ozilla'
console.log(string.substr(-20, 2)); // 'Mo'
console.log(string.substr(20, 2)); // ''

规范

规范
ECMAScript® 2026 语言规范
# sec-string.prototype.substr

浏览器兼容性

另见