คำตอบ: ใช้เมธอด localeCompare()
วิธีที่เหมาะสมที่สุดในการเปรียบเทียบสตริงใน JavaScript คือใช้เมธอด localeCompare() ซึ่งคำนึงถึงกฎภาษาและ locale
ค่าที่คืนกลับ
0: สตริงทั้งสองเท่ากัน-1: สตริงแรกเรียงก่อนสตริงที่สอง1: สตริงที่สองเรียงก่อนสตริงแรก
ตัวอย่างโค้ด
<!DOCTYPE html>
<html>
<body>
<button onclick="compareStr()">Compare Strings</button>
<p id="test"></p>
<script>
function compareStr() {
var string1 = "World";
var string2 = "World";
var result = string1.localeCompare(string2);
document.getElementById("test").innerHTML = result;
}
</script>
</body>
</html>
ตัวอย่างเพิ่มเติม
"apple".localeCompare("banana"); // -1 (a มาก่อน b)
"banana".localeCompare("apple"); // 1
"apple".localeCompare("apple"); // 0
// รองรับ locale และตัวเลือก
"ä".localeCompare("z", "de"); // -1 (ในภาษาเยอรมัน ä เรียงก่อน z)
"ä".localeCompare("z", "sv"); // 1 (ในภาษาสวีดिश z เรียงก่อน ä)
// ตัวเลือก sensitivity
"abc".localeCompare("ABC", undefined, { sensitivity: 'base' }); // 0 (ignore case)
"abc".localeCompare("ABC", undefined, { sensitivity: 'variant' }); // -1 (case-sensitive)
วิธีอื่นๆและข้อจำกัด
| วิธี | คำอธิบาย | ข้อจำกัด |
|---|---|---|
=== | เปรียบเทียบค่าและชนิดข้อมูล | ไม่คำนึงถึง locale, case-insensitive ไม่ได้ |
== | เปรียบเทียบค่า (มี type coercion) | ไม่แนะนำ ให้ผลลัพธ์น่าประหลาดใจ |
>, < | เปรียบเทียบลำดับ Unicode | ไม่คำนึงถึงกฎภาษา (locale) |
localeCompare() | เปรียบเทียบตามกฎภาษา/locale | ช้ากว่าเล็กน้อย แต่ถูกต้องที่สุด |
สรุป
สำหรับการเปรียบเทียบสตริงทั่วไป (เฉพาะภาษาอังกฤษ ASCII) ใช้ === ได้ แต่สำหรับการเรียงลำดับ การค้นหา หรือรองรับหลายภาษา localeCompare() เป็นวิธีที่ดีที่สุดและถูกต้องที่สุด