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 2015å¹´7æ.
localeCompare() åå³ä¸åæ¸åï¼ç¨ä¾è¡¨ç¤ºå
¶è被æ¯è¼çå串çå
å¾é åºã
妿ç°å¢ä¸ææ¯æ´Intl.Collator APIï¼éåæ¹æ³å¯¦é䏿¯èª¿ç¨ Intl.Collator APIã
å試ä¸ä¸
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
èªæ³
localeCompare(compareString)
localeCompare(compareString, locales)
localeCompare(compareString, locales, options)
忏
locales å options 忏å¯ä»¥èª¿æ´å½æ¸çåå³çµæï¼ä¸¦ä¸è½æå®è¦ä¾ç
§åªç¨®èªè¨ä¾é²è¡æ¯è¼ã
å¨å¯¦ç¾ Intl.Collator APIçç°å¢ä¸ï¼éäºåæ¸è Intl.Collator() ç忏äºç¸å°æï¼
è¥ç°å¢æ²æå¯¦ç¾ Intl.Collator ï¼åéå
©å忏就æè¢«å¿½ç¥ï¼å
¶åå³çµæå®å
¨ç該ç°å¢å¦ä½å¯¦ä½ï¼å¯ä¸çè¦æ±æ¯ï¼å°æ¼å樣çåä¸²ï¼æ¯è¼çµæå¿
é å§çµä¸è´ã
compareString-
è¦å
referenceStré²è¡æ¯è¼çå串 locales鏿æ§-
ãBCP 47 èªè¨æ¨ç±¤ãçåä¸²ææ¯é£åãç¸ç¶æ¼
Intl.Collator()çlocales忏ãå¦æä½¿ç¨çç°å¢ä¸¦æªå¯¦ç¾
Intl.Collatorï¼æ¤åæ¸æè¢«å¿½ç¥ï¼ä¸¦ä¸è¦åæ¡ç¨ç¶å主æ©çèªè¨ç°å¢ options鏿æ§-
ä¸åèçè¼¸åºæ ¼å¼çç©ä»¶ãç¸ç¶æ¼
Intl.Collator()çoptions忏ãå¦æä½¿ç¨çç°å¢ä¸¦æªå¯¦ç¾
Intl.Collatorï¼æ¤åæ¸æè¢«å¿½ç¥ã
éæ¼localesåoptions忏以åå
¶ä½¿ç¨çè³è¨ï¼å¯åé±Intl.Collator() constructorã
åå³å¼
妿referenceStrå¨compareString以å
ï¼æåå³è² æ¸ï¼è¥referenceStrå¨compareString以å¾ï¼åçºæ£æ¸; 0表示å
©è
ç¸çã
妿æä½¿ç¨çç°å¢æå¯¦ç¾ Intl.Collatorï¼ç¸ç¶æ¼åå³ new Intl.Collator(locales, options).compare(referenceStr, compareString)ã
說æ
åå³ referenceStr å compareStringçå
å¾é åº
- è¥åå³è² æ¸ï¼è¡¨ç¤º
referenceStrå¨compareString以å - è¥çºæ£æ¸ï¼è¡¨ç¤º
referenceStrå¨compareStringä»¥å¾ - è¥åå³
0ï¼è¡¨ç¤ºå ©è ç¸ç
è¦åï¼ä¸è¦ä¾é ç¹å®çåå³å¼ï¼ä¾å¦ -1 ææ¯ 1ï¼
æ£æ¸ææ¯è² æ¸çåå³å¼å¨ä¸åçç覽å¨(ä¹å
èªåä¸ç覽å¨ä½ä¸åçæ¬ï¼ä¹éæå¯è½æææä¸åãå çº W3C è¦ç¯å
è¦æ±å¼å¾æ£è² èå·²ã
ä¹å æ¤ï¼æäºç覽å¨å¯è½æåå³ -2 ã 2 çè³å
¶ä»å¼ã
æè½
妿è¦å°å¤§éçå串é²è¡æ¯è¼ï¼ä¾å¦æåºé·åº¦å¾é·çé£åï¼æå¥½æ¯å»ºç«ä¸å Intl.Collatorç©ä»¶ä¸¦ä½¿ç¨å
¶compare æ¹æ³ã
ç¯ä¾
>ä½¿ç¨ localeCompare()
// "a" å¨ "c" ä¹åï¼æä»¥æåå³è² æ¸
"a".localeCompare("c"); // -2ã-1 ææ¯å
¶ä»è² æ¸å¼
// æåæ¯é åºï¼ãcheckãçé åºå¨ãagainstãä¹å¾ï¼æä»¥å峿£æ¸
"check".localeCompare("against"); // 2ã1 æå
¶ä»æ£æ¸å¼
// "a" å "a" ç¸åï¼æä»¥åå³ 0
"a".localeCompare("a"); // 0
é£åæåº
localeCompare() ç¨ä¾é²è¡ãä¸å大å°å¯«ãçæåº
let 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é']
檢æ¥ç覽å¨å°é¡å¤åæ¸çæ¯æ´åº¦
䏦䏿¯ææç覽å¨é½æ¯æ´ locales å options 忏ã
è¦æª¢æ¥æ¯å¦æ¯æ´ï¼å¯ä»¥ä½¿ç¨ "i" åæ¸ï¼æ£å¸¸æ
æ³ä¸ï¼éæ£å¸¸çèªè¨æ¨ç±¤æåå ±é¯èª¤ï¼ä¸¦æª¢æ¥æ¯å¦æ RangeError exceptionï¼
function localeCompareSupportsLocales() {
try {
"foo".localeCompare("bar", "i");
} catch (e) {
return e.name === "RangeError";
}
return false;
}
ä½¿ç¨ locales
localeCompare()åå³ççµææå çºèªè¨èææä¸åã
çºäºè®åå³çµæä¾ç
§ç¹å®èªè¨ä¾æåºï¼è«ç¢ºä¿ä½¿ç¨ locales 忏æå®è©²èªè¨ï¼å¯è½éè¦åå ä¸å
¶ä»å¾åèªè¨ï¼ï¼
console.log("ä".localeCompare("z", "de")); // åå³è² æ¸ï¼å¨å¾·æ, ä çé åºå¨ z ä¹å
console.log("ä".localeCompare("z", "sv")); // å峿£æ¸ï¼å¨çå
¸æï¼ ä çé åºå¨ z ä¹å¾
ä½¿ç¨ options
localeCompare() å¯ä»¥èç± options 忏ä¾èª¿æ´ï¼
// å¨å¾·æï¼ ä å a æ¯ç¸å忝
console.log("ä".localeCompare("a", "de", { sensitivity: "base" })); // 0
// å¨çå
¸æï¼ ä å a æ¯åèªç¨ç«ç忝
console.log("ä".localeCompare("a", "sv", { sensitivity: "base" })); // å峿£æ¸
æ¸åæåº
// é»èªæ
æ³ä¸, "2" > "10"
console.log("2".localeCompare("10")); // 1
// ä½¿ç¨ option è®å
¶è¦çºæ¸åé²è¡æ¯è¼
console.log("2".localeCompare("10", undefined, { numeric: true })); // -1
// 使ç¨localesæ¨ç±¤
console.log("2".localeCompare("10", "en-u-kn-true")); // -1
è¦ç¯
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-string.prototype.localecompare> |
| ECMAScript® 2027 Internationalization API Specification> # sup-String.prototype.localeCompare> |