Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Khác biệt giữa substr() và substring() trong JavaScript

Hai phương thức substr() và substring() trong JavaScript đều dùng để trích xuất một phần của chuỗi, nhưng cách thức hoạt động của tham số thứ hai hoàn toàn khác nhau. Hiểu rõ sự khác biệt này giúp bạn tránh những lỗi logic tinh vi khi xử lý chuỗi.

Sự khác biệt cốt lõi

  • substring(start, end): Tham số thứ hai (end) là chỉ số kết thúc (không bao gồm ký tự tại vị trí này).
  • substr(start, length): Tham số thứ hai (length) là số lượng ký tự tối đa cần trích xuất.

Ngoài ra, substr() cho phép chỉ số bắt đầu âm (đếm từ cuối chuỗi), trong khi substring() coi chỉ số âm như 0. Lưu ý: substr() được coi là legacy (lỗi thời), nên ưu tiên dùng substring() hoặc slice() trong mã hiện đại.

Ví dụ minh họa với substr()

const str = "Apples are round, and apples are juicy.";

console.log("(1, 2):", str.substr(1, 2));    // "pp" - từ chỉ số 1, lấy 2 ký tự
console.log("(-2, 2):", str.substr(-2, 2));  // "y." - 2 ký tự từ vị trí倒数 thứ 2
console.log("(1):", str.substr(1));          // "pples are round, and apples are juicy." - từ chỉ số 1 đến hết
console.log("(-20, 2):", str.substr(-20, 2)); // "ap" - 20 ký tự từ cuối, lấy 2 ký tự
console.log("(20, 2):", str.substr(20, 2));   // "nd" - từ chỉ số 20, lấy 2 ký tự

Ví dụ minh họa với substring()

const str = "Apples are round, and apples are juicy.";

console.log("(1, 2):", str.substring(1, 2));   // "p" - chỉ số 1 đến trước chỉ số 2
console.log("(0, 10):", str.substring(0, 10)); // "Apples are" - 10 ký tự đầu
console.log("(5):", str.substring(5));         // "s are round, and apples are juicy." - từ chỉ số 5 đến hết

Bảng so sánh nhanh

Trường hợpsubstr(start, len)substring(start, end)
start âmĐếm từ cuối chuỗiĐược coi là 0
end < startKhông ảnh hưởng (dùng length)Tự động hoán đổi 2 tham số
Trạng tháiLegacy (khuyên không dùng)Chuẩn ECMAScript

Khuyến nghị: Hãy dùng substring() hoặc slice() (cũng hỗ trợ chỉ số âm) để code nhất quán, dễ bảo trì và tuân thủ chuẩn hiện đại.