การทำงานตัวเทียบ ECMAScript
- หน้าก่อนหน้า ตัวเลขเพิ่ม
- หน้าต่อไป ตัวเลขเทียบเท่า
ประเมินตัวเปรียบเทียบทำงานเพื่อเปรียบเทียบ และในทุกประเมินตัวเรื่อง จะกลับค่า Boolean หนึ่ง
วิธีเปรียบเทียบปกติ
ประเมินตัวต่ำกว่า มากกว่า ต่ำกว่าหรือมากกว่าเท่า ตั้งแต่สองตัวเลข ทำงานเหมือนการเปรียบเทียบคณิตศาสตร์ ของสองตัวเลข
ในทุกประเมินตัวเรื่อง จะกลับค่า Boolean หนึ่ง:
var bResult1 = 2 > 1 //true var bResult2 = 2 < 1 //false
อย่างไรก็ตาม การนำเสนอการเรียกใช้ประเมินตัวเลขสำหรับสองข้อความนี้ มีพฤติกรรมที่แตกต่างกัน หลายคนคิดว่า "ต่ำ" หมายถึง "อยู่ในลำดับอักษรที่หน้า" และ "มากกว่า" หมายถึง "อยู่ในลำดับอักษรที่ข้างหลัง" แต่เรื่องนี้ไม่ได้เป็นจริง สำหรับข้อความ การเปรียบเทียบจะเป็นการเปรียบเทียบตัวอักษรของข้อความแรกกับตัวอักษรที่ตำแหน่งเดียวกันของข้อความที่สอง หลังจากที่เปรียบเทียบสิ้นสุด จะกลับค่า Boolean หนึ่ง ปัญหานี้เกิดขึ้นเพราะรหัสอักษรใหญ่ทั้งหมดเล็กกว่ารหัสอักษรเล็ก ซึ่งหมายความว่าอาจเกิดสถานการณ์ดังนี้:
var bResult = "Blue" < "alpha"; alert(bResult); // แสดง true
ในตัวอย่างที่ผ่านมา ตัวอักษร "Blue" ต่ำกว่า "alpha" เพราะรหัสอักษร B คือ 66 และรหัสอักษร a คือ 97 ถ้าต้องการเปรียบเทียบตามลำดับอักษรที่แท้จริง ต้องเปลี่ยนตัวเลขทั้งสองเป็นรูปแบบในเกณฑ์ตัวใหญ่หรือตัวเล็ก ก่อนที่จะเปรียบเทียบ:
var bResult = "Blue".toLowerCase() < "alpha".toLowerCase(); alert(bResult); // ออก false
แปลงทั้งสองตัวเลขเป็นตัวอักษรต่ำเพื่อให้สามารถรับรู้ถึงความถูกต้องในลำดับตัวอักษร ดังนั้น "alpha" จะอยู่ก่อน "Blue" ในลำดับตัวอักษร
เทียบเทียบตัวเลขและตัวอักษร
สถานการณ์ที่ยากที่แสนยากอีกด้วยเกิดขึ้นเมื่อเทียบเทียบตัวเลขที่เป็นตัวอักษรเช่นนี้ ตัวอย่างเช่น:
var bResult = "25" < "3"; alert(bResult); // ออก "true"
โค้ดด้านบนเทียบเทียบตัวอักษร "25" กับ "3" ทั้งสองตัวเลขเป็นตัวอักษร ดังนั้นเทียบเท่าตามรหัสอักษร (รหัสอักษรของ "2" คือ 50 และรหัสอักษรของ "3" คือ 51)
แต่ถ้าเปลี่ยนหนึ่งในตัวเลขเป็นตัวเลข ผลลัพธ์ก็จะน่าสนใจ:
var bResult = "25" < 3; alert(bResult); // ออก "false"
ที่นี้ ตัวอักษร "25" จะถูกแปลงเป็นตัวเลข 25 แล้วเทียบเท่ากับตัวเลข 3 ตามที่คาดการณ์ไว้
ในทุกกรณีที่เปรียบเทียบตัวเลขและตัวอักษร ECMAScript จะแปลงตัวอักษรเป็นตัวเลข แล้วเทียบเท่าตามลำดับตัวเลข
แต่ว่าถ้าตัวอักษรไม่สามารถแปลงเป็นตัวเลขได้แล้วจะเป็นอย่างไร? จับตาดูตัวอย่างด้านล่างนี้:
var bResult = "a" < 3; alert(bResult);
คุณสามารถคาดการณ์ถึงรายงานของโค้ดนี้ได้ไหม? ตัวอักษร "a" ไม่สามารถแปลงเป็นตัวเลขที่มีความหมายได้ แต่ถ้าเรียกใช้วิธี parseInt() ก็จะได้ค่า NaN ตามกฎ ในทางเดียวกันที่ค่า NaN ในการคำนวณเชื่อมโยงจะต้องหมดค่า false ดังนั้นโค้ดนี้ก็จะหมดค่า false
var bResult = "a" >= 3; alert(bResult);
โดยทั่วไป ถ้าค่าที่ใช้ในการคำนวณเทียบเท่าต่ำกว่าเท่านั้นจะหมดค่า false แล้ว ในขณะที่การคำนวณเทียบเท่ามากกว่าเท่านั้นจะต้องหมดค่า true แต่ถ้ามีตัวเลขเป็น NaN สถานการณ์ก็จะไม่เหมือนนั้น
- หน้าก่อนหน้า ตัวเลขเพิ่ม
- หน้าต่อไป ตัวเลขเทียบเท่า