JavaScript มีสองวิธีในการตรวจสอบว่าทั้งสองค่าเท่ากันหรือไม่
สัญลักษณ์ที่เท่ากัน
สัญลักษณ์ความเท่าเทียมกันประกอบด้วยสองสัญญาณเท่ากัน: ==
JavaScript เป็นภาษาที่อ่อนแอ ซึ่งหมายความว่าสัญญาณที่เท่าเทียมกันจะใช้ประเภทเพื่อเปรียบเทียบสองค่า
การคัดลอกรหัสมีดังนี้:
"" == "0" // เท็จ
0 == "" // จริง
0 == "0" // จริง
false == "false" // false
false == "0" // true
false == undefined // false
false == null // false
null == undefined // true
"/t/r/n" == 0 // true
รหัสด้านบนแสดงผลลัพธ์ของการแปลงประเภทดังนั้นเราจึงรู้ว่าการใช้เครื่องหมายเท่ากัน == เป็นนิสัยการเขียนโปรแกรมที่ไม่ดี เนื่องจากกลไกการแปลงประเภทที่ซับซ้อนในจาวาสคริปต์ข้อผิดพลาดที่เกิดขึ้นจะยากต่อการติดตาม
นอกจากนี้การคัดเลือกนักแสดงประเภทยังสามารถส่งผลกระทบต่อประสิทธิภาพบางอย่างเช่นเมื่อเปรียบเทียบสตริงกับตัวเลขมันจะถูกส่งไปยังตัวเลข
สัญลักษณ์ความเท่าเทียมกันอย่างเข้มงวด
สัญลักษณ์ความเท่าเทียมกันอย่างเข้มงวดประกอบด้วยสามสัญญาณเท่ากัน: ===
มันคล้ายกับการทำงานของสัญลักษณ์ที่เท่าเทียมกัน แต่สัญลักษณ์ที่เท่าเทียมกันอย่างเคร่งครัดจะไม่ดำเนินการคัดเลือกนักแสดง
การคัดลอกรหัสมีดังนี้:
"" === "0" // เท็จ
0 === "" // เท็จ
0 === "0" // เท็จ
false === "false" // false
false === "0" // false
false === undefined // false
false === null // false
null === undefined // false
"/t/r/n" === 0 // false
รหัสข้างต้นทำให้รหัสชัดเจนขึ้น หากทั้งสองค่ามีประเภทที่แตกต่างกันพวกเขาจะส่งคืนเท็จโดยตรงซึ่งจะปรับปรุงประสิทธิภาพ
วัตถุเปรียบเทียบ
แม้ว่า == และ === เรียกว่าสัญญาณเท่ากันประสิทธิภาพจะแตกต่างกันมากเมื่อค่าหนึ่งในสองค่าเปรียบเทียบเป็นวัตถุ
การคัดลอกรหัสมีดังนี้:
- // เท็จ
สตริงใหม่ ('foo') === 'foo'; // เท็จ
หมายเลขใหม่ (10) === 10; // เท็จ
var foo = {};
foo === foo; // จริง
ที่นี่มันไม่ได้เป็นเพียงการเปรียบเทียบว่าทั้งสองค่าเท่ากันมันจะกำหนดว่าทั้งสองค่าอ้างถึงอินสแตนซ์ของวัตถุเดียวกันซึ่งทำงานเหมือนตัวชี้ใน C.
สรุป
ขอแนะนำอย่างยิ่งที่นี่เพื่อใช้สัญลักษณ์ความเท่าเทียมกันอย่างเข้มงวดเท่านั้น === หากเราจำเป็นต้องทำการแปลงประเภทเราสามารถทำการแปลงประเภทที่ชัดเจนก่อนการเปรียบเทียบแทนที่จะพึ่งพาวิธีการคัดเลือกนักแสดงที่ซับซ้อนของ JavaScript