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ợp | substr(start, len) | substring(start, end) |
|---|---|---|
| start âm | Đếm từ cuối chuỗi | Được coi là 0 |
| end < start | Không ảnh hưởng (dùng length) | Tự động hoán đổi 2 tham số |
| Trạng thái | Legacy (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.