瀏覽器早已廢棄了這個 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(),不僅僅是跟上技術潮流,更是為了編寫出更清晰、更健壯、更易于他人理解的代碼。

































