紀錄工作經驗、相關知識,解決技術相關問題。

Javascript, React, 工作雜談, 新手 Jamp Holes, 網站相關

JavaScript 刪除字串中的第一個字元

JavaScript 刪除字串中的第一個字元 特色圖片

在開發過程中,有時候會使用 JavaScript 刪除字串來處理前端路由字串、API 回傳路徑或是清理使用者輸入時,經常會遇到需要「移除字串第一個字元」的需求。最常見的實作方式便是透過內建的 substring() 與 slice() 方法來達成。本文將詳細比較這兩種語法的差異、極端邊界條件的處理方式,並提供實用的程式碼範例與語法速查,幫助你在不同情境下選擇最合適的解法。

⚡ 快速跳轉:若想直接看可用程式碼與語法對照,可直接參考下方 JavaScript 刪除第一個字元語法速查表。

JavaScript 刪除第一個字元語法速查表

以下是 substring() 與 slice() 在處理字串移除首字時的規格對照與行為差異:

方法核心語法傳入負數索引行為建議使用情境
substring(1)str.substring(1)負數會自動被視為 0 處理一般字串裁切、確保不因負數出錯
slice(1)str.slice(1)從字串尾端開始倒數計算索引慣用的現代 JavaScript 開發寫法

1. 使用 substring() 刪除第一個字元

substring() 方法會傳回從起始索引到結束索引(不包含結束索引)之間的字串。當我們傳入 1 作為參數時,它會從索引位置 1 開始擷取,直到字串結尾,等於直接剔除了索引為 0 的第一個字元。

const str = '/test-string';
const result = str.substring(1);

console.log(result);
// Expected output: "test-string"

substring() 邊界條件注意事項

當傳入的字串為空字串 "" 或僅有一個字元時,執行 str.substring(1) 會安全地傳回空字串 "",不會引發例外錯誤。但若需要傳入變數進行防禦性檢查,建議加上型別確認:

function removeFirstChar(str) {
  if (typeof str !== 'string' || str.length === 0) {
    return '';
  }
  return str.substring(1);
}

console.log(removeFirstChar("")); // Expected output: ""
console.log(removeFirstChar("A")); // Expected output: ""

2. 使用 slice() 刪除第一個字元

slice() 方法同樣可以用來提取字串的一部分。傳入 str.slice(1) 代表從索引 1 開始擷取到最後。由於其語法簡潔且效能表現優異,是許多前端工程師在處理字串裁切時的首選。

const str = '/test-string';
const result = str.slice(1);

console.log(result);
// Expected output: "test-string"

slice() 與 substring() 的主要差異

slice() 與 substring() 在多數一般字串操作下結果相同,但最大差異在於對「負數索引」的處理方式:

  • str.slice(-1) 會從字串結尾倒數取回最後一個字元。
  • str.substring(-1) 會將負數自動轉換為 0,等於傳入 0 進行擷取(即傳回完整字串)。

因此,當明確只要移除第一個字元時,使用 slice(1) 搭配防禦性檢查是極為穩健的寫法。


3. 生產環境完整防禦性程式碼範例

在實際的專案開發中,字串來源可能是 null、undefined 或非字串型別。為了避免程式因為型別錯誤而當機,建議包裝成共用函式來處理:

/**
 * 安全地刪除字串中的第一個字元
 * @param {string} inputStr - 目標字串
 * @returns {string} 處理後的字串
 */
function safeRemoveFirstChar(inputStr) {
  // 防禦機制:檢查是否為有效字串且長度大於 0
  if (!inputStr || typeof inputStr !== 'string') {
    return '';
  }
  
  return inputStr.slice(1);
}

// 測試案例
console.log(safeRemoveFirstChar('/api/v1/users')); // "api/v1/users"
console.log(safeRemoveFirstChar('A'));            // ""
console.log(safeRemoveFirstChar(''));             // ""
console.log(safeRemoveFirstChar(null));           // ""

4. 開發者高頻 Q&A

Q1:如果字串的第一個字元是特殊符號或中文,slice(1) 還能正常運作嗎?

可以。JavaScript 的字串索引是以 UTF-16 單元計算。對於常見的中文或特殊符號(一般 BMP 字元),slice(1) 或 substring(1) 都能正確移除第一個字元。不過若遇到包含 Surrogate Pairs(如部分 Emoji)的字串,單純切索引可能會切斷位元組,若有處理 Emoji 需求建議使用 Array.from(str).slice(1).join('')。

Q2:substring(1) 和 slice(1) 哪一個效能比較好?

在現代 JavaScript 引擎(如 V8)中,兩者的效能幾乎沒有顯著差異。選擇時主要取決於團隊慣用的Coding Style,但 slice() 在處理陣列與字串時的語意一致性較高,因此在實務上更為常見。

Q3:除了 substring 和 slice,還有其他方法可以刪除第一個字元嗎?

有的,例如使用正規表達式 str.replace(/^./, ''),或是將字串轉為陣列後使用 destructuring assignment(解構賦值):

const [first, ...rest] = '/test-string';
const result = rest.join('');
console.log(result); // "test-string"

但在只需移除單一首字的單純場景下,slice(1) 依然是效能與可讀性最好的解法。


參考資料

發表迴響