การคำนวณทางความเสมอ ECMAScript
- หน้าก่อนหน้า การปฏิบัติการความเกี่ยวข้อง
- หน้าต่อไป การปฏิบัติการประเมินเงื่อนไข
การตรวจสอบความเท่าเทียมของสองตัวแปรเป็นการปฏิบัติที่สำคัญในการออกแบบโปรแกรม ในการจัดการค่าตัวเดิม การปฏิบัตินี้เป็นที่ง่าย แต่เมื่อมีวัตถุ งานก็เล็กน้อยลำบากขึ้น
ECMAScript มีสองชุดสัญญาณเสมอนั้น และไม่เสมอนั้น สำหรับการจัดการค่าตัวเดิม และสัญญาณเสมอนั้นและไม่เสมอนั้นสำหรับวัตถุ
เสมอนั้นและไม่เสมอนั้น
ใน ECMAScript สัญญาณเสมอนั้นเป็นเสมอนั้น (==) มันกลับค่า true เมื่อและเฉพาะเมื่อสองตัวประกาศเท่ากัน สัญญาณไม่เสมอนั้นเป็น ! (!=) มันกลับค่า true เมื่อและเฉพาะเมื่อสองตัวประกาศไม่เท่ากัน สำหรับตั้งตัวประกาศเท่าเทียมหรือไม่เท่ากัน ทั้งสองสัญญาณนี้จะทำการแปลงประเภท
กฎการแปลงประเภทตามต่อไปนี้:
- ถ้าตัวประกาศหนึ่งเป็นค่า Boolean ก่อนการตรวจสอบความเท่าเทียม ต้องแปลงมันเป็นค่าเลข ค่า false แปลงเป็น 0 และค่า true แปลงเป็น 1
- ถ้าตัวประกาศหนึ่งเป็นตัวอักษร และตัวประกาศอีกตัวเป็นตัวเลข ก่อนการตรวจสอบความเท่าเทียม ต้องพยายามแปลงตัวอักษรให้เป็นตัวเลข
- ถ้าตัวประกาศหนึ่งเป็นวัตถุ และตัวประกาศอีกตัวเป็นตัวอักษร ก่อนการตรวจสอบความเท่าเทียม ต้องพยายามแปลงวัตถุให้เป็นตัวอักษร
- ถ้าตัวประกาศหนึ่งเป็นวัตถุ และตัวประกาศอีกตัวเป็นตัวเลข ก่อนการตรวจสอบความเท่าเทียม ต้องพยายามแปลงวัตถุให้เป็นตัวเลข
ในการเปรียบเทียบ ตัวประกาศนี้ยังปฏิบัติตามกฎต่อไปนี้:
- ค่า null และ undefined เท่ากัน
- ในการตรวจสอบความเท่าเทียม ไม่สามารถแปลงค่า null และ undefined ไปเป็นค่าอื่นได้
- ถ้าตัวประกาศหนึ่งเป็น NaN เสมอนั้นกลับค่า false ไม่เท่ากับกลับค่า true。
- ถ้าสองตัวประกาศทั้งสองเป็นวัตถุ การเปรียบเทียบคือการเปรียบเทียบค่าอ้างอิงของมัน ถ้าสองตัวประกาศนำไปสู่วัตถุเดียวกัน เสมอนั้นกลับค่า true ไม่เท่ากับวัตถุทั้งสองไม่เท่ากัน。
คำเตือนสำคัญ:แม้ว่าจะมีสองตัวเลขทั้งสองเป็น NaN แต่เสมอนั้นยังคงกลับค่า false เพราะตามกฎ NaN ไม่เท่ากับ NaN。
ตารางด้านล่างนี้นำออกสถานการณ์พิเศษบางอย่างและผลลัพธ์ของมัน:
แสดง式 | ค่า |
---|---|
null == undefined | true |
"NaN" == NaN | false |
5 == NaN | false |
NaN == NaN | false |
NaN != NaN | true |
false == 0 | true |
true == 1 | true |
true == 2 | false |
undefined == 0 | false |
null == 0 | false |
"5" == 5 | true |
เสมอกัน ( === ) และไม่เท่ากัน ( !== )
เสมอกัน ( === ) และไม่เท่ากัน ( !== ) นั้นเหมือนกับเสมอ ( == ) และไม่เท่ากัน ( != ) ตามลำดับ ทั้งสองเปรียบเทียบความเท่ากัน แต่ไม่ทำการปรับปรุงประเภทก่อนเปรียบเทียบ
เสมอกัน ( === ) นำเสนอด้วยขอบเขตเซอร์ดิวัลส์ ( === ) มีความถูกต้องเมื่อองค์ประกอบไม่ต้องทำการปรับปรุงประเภท ทำให้กลับมาเป็น true
ตัวอย่าง
var sNum = "66"; var iNum = 66; alert(sNum == iNum); // ออก "true" alert(sNum === iNum); // ออก "false"
ในรหัสที่มีอยู่ การใช้ alert แรกใช้เสมอ ( == ) ในการเปรียบเทียบข้อความ "66" กับตัวเลข 66 จึงออก "true" ตามที่กล่าวไปแล้ว เนื่องจากข้อความ "66" จะถูกเปลี่ยนเป็นตัวเลข 66 ก่อนที่จะเปรียบเทียบกับตัวเลขอื่น การใช้ alert ที่สองใช้เสมอ ( == ) ในการเปรียบเทียบข้อความและตัวเลขโดยไม่มีการปรับปรุงประเภท ซึ่งเห็นได้ว่าข้อความไม่เท่ากันกับตัวเลข ดังนั้นจึงออก "false"
ไม่เท่ากัน ( !== ) นำเสนอด้วยขอบเขตเซอร์ดิวัลส์ ( !== ) มีความถูกต้องเมื่อองค์ประกอบไม่ต้องทำการปรับปรุงประเภท ทำให้กลับมาเป็น true
ตัวอย่าง
var sNum = "66"; var iNum = 66; alert(sNum != iNum); // ออก "false" alert(sNum !== iNum); // ออก "true"
ที่นี่ การใช้ alert แรกใช้ไม่เท่ากัน ( !== ) ในการเปลี่ยนข้อความ "66" ให้เป็นตัวเลข 66 ดังนั้นมันจึงเท่ากันกับองค์ประกอบที่สอง 66 ดังนั้นค่าที่หาได้คือ "false" เพราะองค์ประกอบทั้งสองเท่ากัน การใช้ alert แรกใช้ไม่เท่ากัน ( !== ) ของการประเมินความแตกต่าง การประเมินคือการถามว่า "sNum" และ "iNum" ต่างกันหรือไม่? ตอบคำถามนี้คือใช่ (true) เพราะ sNum คือข้อความ และ iNum คือตัวเลข พวกเขาต่างกันตรงที่แน่นอน
- หน้าก่อนหน้า การปฏิบัติการความเกี่ยวข้อง
- หน้าต่อไป การปฏิบัติการประเมินเงื่อนไข