浏览器早已废弃了这个JavaScript API,90%开发者还在用


substr() 已从 Web 标准中删除,虽然一些浏览器目前仍然支持它,但它随时可能被删除,可使用 slice()
作为替代首选方案。

为什么 substr() 会被废弃?

substr() 被废弃的核心原因在于它的 API 设计存在不一致性和歧义,我们先来看看这三兄弟的用法:

  • slice(startIndex, endIndex)
  • substring(startIndex, endIndex)
  • substr(startIndex, length)

slice() substring() 的第二个参数都是结束索引(不包含),而 substr()
的第二个参数却是截取的长度。

这种不一致性常常导致开发者混淆,尤其是在快速编码或维护旧代码时,很容易写出错误的逻辑。

新选择: slice() substring()

既然 substr() 不再推荐使用,我们应该转向它的两个兄弟。它们不仅是现行标准,而且功能更强大、行为更可预测。

1. slice(startIndex, endIndex)

slice() 是目前最灵活、最常用的字符串截取方法:

const str = "JavaScript";  
  
// 基本用法  
console.log(str.slice(0, 4));  // "Java"  
  
// 省略 endIndex,会截取到字符串末尾  
console.log(str.slice(4));     // "Script"  
  
// 使用负数索引(超级好用!)  
console.log(str.slice(-6));    // "Script" (从倒数第 6 个字符开始)  
console.log(str.slice(0, -6)); // "Java" (从头开始,到倒数第 6 个字符结束)  

2. substring(startIndex, endIndex)

substring() slice() 非常相似,但如果 startIndex 大于 endIndex
,它会自动交换两个参数的位置。

const str = "JavaScript";  
  
// 基本用法  
console.log(str.substring(0, 4)); // "Java"  
  
// start > end,自动交换位置  
console.log(str.substring(4, 0)); // "Java" (等同于 substring(0, 4))  
  
// 负数参数被视为 0  
console.log(str.substring(-5, 4)); // "Java" (等同于 substring(0, 4))  

由于 substring() 的自动交换和处理负数的行为有时会让人困惑,通常我们更推荐使用 slice()
,因为它的行为更加严格和可预测。

代码不仅是用来执行的,更是用来阅读和维护的。

放弃 substr() ,拥抱 slice() substring()
,不仅仅是跟上技术潮流,更是为了编写出更清晰、更健壮、更易于他人理解的代码。