String.prototype.localeCompare()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Phương thức localeCompare() của các giá trị String trả về một số cho biết string này đứng trước, sau, hay bằng với string đã cho trong thứ tự sắp xếp. Trong các triển khai có hỗ trợ API Intl.Collator, phương thức này ủy quyền cho Intl.Collator.
Khi so sánh số lượng lớn string, chẳng hạn như sắp xếp mảng lớn, tốt hơn là tạo một đối tượng Intl.Collator và sử dụng hàm được cung cấp bởi phương thức compare() của nó.
Try it
const a = "réservé"; // With accents, lowercase
const b = "RESERVE"; // No accents, uppercase
console.log(a.localeCompare(b));
// Expected output: 1
console.log(a.localeCompare(b, "en", { sensitivity: "base" }));
// Expected output: 0
Cú pháp
localeCompare(compareString)
localeCompare(compareString, locales)
localeCompare(compareString, locales, options)
Tham số
Các tham số locales và options tùy chỉnh hành vi của hàm và cho phép các ứng dụng chỉ định ngôn ngữ mà các quy ước định dạng của nó nên được sử dụng.
Trong các triển khai hỗ trợ API Intl.Collator, các tham số này tương ứng chính xác với các tham số của constructor Intl.Collator(). Các triển khai không có hỗ trợ Intl.Collator được yêu cầu bỏ qua cả hai tham số, làm cho kết quả so sánh được trả về hoàn toàn phụ thuộc vào triển khai — chỉ cần nhất quán.
compareString-
String mà
referenceStrđược so sánh với. Tất cả các giá trị đều được ép kiểu thành string, vì vậy bỏ qua hoặc truyềnundefinedkhiếnlocaleCompare()so sánh với string"undefined", điều này hiếm khi bạn muốn. localesOptional-
Một string với BCP 47 language tag, hoặc một mảng các string như vậy. Tương ứng với tham số
localescủa constructorIntl.Collator().Trong các triển khai không có hỗ trợ
Intl.Collator, tham số này bị bỏ qua và thường sử dụng locale của host. optionsOptional-
Một đối tượng điều chỉnh định dạng đầu ra. Tương ứng với tham số
optionscủa constructorIntl.Collator().Trong các triển khai không có hỗ trợ
Intl.Collator, tham số này bị bỏ qua.
Xem constructor Intl.Collator() để biết chi tiết về các tham số locales và options và cách sử dụng chúng.
Giá trị trả về
Một số âm nếu referenceStr xuất hiện trước compareString; dương nếu referenceStr xuất hiện sau compareString; 0 nếu chúng tương đương.
Trong các triển khai với Intl.Collator, điều này tương đương với new Intl.Collator(locales, options).compare(referenceStr, compareString).
Mô tả
Trả về một số nguyên cho biết referenceStr đứng trước, sau hoặc tương đương với compareString.
- Âm khi
referenceStrđứng trướccompareString - Dương khi
referenceStrđứng saucompareString - Trả về
0nếu chúng tương đương
Warning:
Đừng dựa vào các giá trị trả về chính xác là -1 hoặc 1!
Các kết quả số nguyên âm và dương khác nhau giữa các trình duyệt (cũng như giữa các phiên bản trình duyệt) vì đặc tả ECMAScript chỉ yêu cầu các giá trị âm và dương. Một số trình duyệt có thể trả về -2 hoặc 2, hoặc thậm chí một số giá trị âm hoặc dương nào đó.
Ví dụ
>Sử dụng localeCompare()
// The letter "a" is before "c" yielding a negative value
"a".localeCompare("c"); // -2 or -1 (or some other negative value)
// Alphabetically the word "check" comes after "against" yielding a positive value
"check".localeCompare("against"); // 2 or 1 (or some other positive value)
// "a" and "a" are equivalent yielding a neutral value of zero
"a".localeCompare("a"); // 0
Sắp xếp một mảng
localeCompare() cho phép sắp xếp không phân biệt chữ hoa chữ thường cho một mảng.
const items = ["réservé", "Premier", "Cliché", "communiqué", "café", "Adieu"];
items.sort((a, b) => a.localeCompare(b, "fr", { ignorePunctuation: true }));
// ['Adieu', 'café', 'Cliché', 'communiqué', 'Premier', 'réservé']
Kiểm tra hỗ trợ trình duyệt cho các đối số mở rộng
Các đối số locales và options chưa được hỗ trợ trong tất cả các trình duyệt.
Để kiểm tra xem một triển khai có hỗ trợ chúng hay không, hãy sử dụng đối số "i" (một yêu cầu rằng các thẻ ngôn ngữ không hợp lệ bị từ chối) và tìm kiếm ngoại lệ RangeError:
function localeCompareSupportsLocales() {
try {
"foo".localeCompare("bar", "i");
} catch (e) {
return e.name === "RangeError";
}
return false;
}
Sử dụng locales
Các kết quả do localeCompare() cung cấp khác nhau giữa các ngôn ngữ. Để có thứ tự sắp xếp của ngôn ngữ được sử dụng trong giao diện người dùng ứng dụng của bạn, hãy chắc chắn chỉ định ngôn ngữ đó (và có thể một số ngôn ngữ dự phòng) bằng cách sử dụng đối số locales:
console.log("ä".localeCompare("z", "de")); // a negative value: in German, ä sorts before z
console.log("ä".localeCompare("z", "sv")); // a positive value: in Swedish, ä sorts after z
Sử dụng options
Các kết quả do localeCompare() cung cấp có thể được tùy chỉnh bằng đối số options:
// in German, ä has a as the base letter
console.log("ä".localeCompare("a", "de", { sensitivity: "base" })); // 0
// in Swedish, ä and a are separate base letters
console.log("ä".localeCompare("a", "sv", { sensitivity: "base" })); // a positive value
Sắp xếp số
// by default, "2" > "10"
console.log("2".localeCompare("10")); // 1
// numeric using options:
console.log("2".localeCompare("10", undefined, { numeric: true })); // -1
// numeric using locales tag:
console.log("2".localeCompare("10", "en-u-kn-true")); // -1
Đặc tả
| Thông số kỹ thuật |
|---|
| ECMAScript® 2027 Language Specification> # sec-string.prototype.localecompare> |
| ECMAScript® 2026 Internationalization API Specification> # sup-String.prototype.localeCompare> |