Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

JavaScript:ตัวดำเนินการความเท่าเทียมกัน

มีสี่วิธีในการเปรียบเทียบความเท่าเทียมกันใน JavaScript บทความนี้กล่าวถึงตัวดำเนินการเฉพาะที่ใช้ในการกำหนดความเท่าเทียมกัน ประเภทการบีบบังคับ และลักษณะเฉพาะบางอย่างที่พบเมื่อประเมินค่าที่เป็นจริงหรือเท็จในภาษา JavaScript

การเปรียบเทียบความเท่าเทียมกันอย่างเข้มงวด

ตัวดำเนินการความเท่าเทียมกันที่เข้มงวดจะแสดงด้วยเครื่องหมายเท่ากับสามเท่า (===) จุดประสงค์ของโอเปอเรเตอร์นี้คือการเปรียบเทียบไม่เพียงแต่ค่าเท่านั้น แต่ยังรวมถึงประเภทของมันด้วย

const strictComparison = (a, b) => {
 console.log(typeof a);
 console.log(typeof b);
 return a === b;
}
 
strictComparison(8, '8'); //false

strictComparison ฟังก์ชันในตัวอย่างด้านบนรับค่าสองค่าและคืนค่าว่าค่าทั้งสองมีค่าเท่ากันหรือไม่

เมื่อมองแวบแรก ค่าจะเหมือนกันเพราะเป็นค่าทั้งคู่ 8 . อย่างไรก็ตาม ตัวดำเนินการความเท่าเทียมที่เข้มงวดก็ดูที่ประเภทด้วยเช่นกัน หากเราจะดูที่ a ในกรณีนี้และดูที่ typeof a , มันจะส่งคืน ‘number’ . หากเราทำเช่นเดียวกันกับ b ด้วย typeof b , มันจะส่งคืน ‘string’ .

เนื่องจากประเภทไม่เหมือนกัน มันจะส่งคืน false .

การเปรียบเทียบที่ผิดปกติกับ ===

มีการเปรียบเทียบที่ผิดปกติบางอย่างที่สามารถทำได้ด้วยตัวดำเนินการเท่ากับที่เข้มงวดใน JavaScript ต่อไปนี้คือข้อมูลบางส่วนที่มักถูกถามในสถานการณ์สัมภาษณ์:

ตัวถูกดำเนินการ1 ประเภทของ ตัวถูกดำเนินการ1 ตัวถูกดำเนินการ 2 ประเภทของ ตัวถูกดำเนินการ2 คืนค่า
null วัตถุ ว่าง วัตถุ จริง
ไม่ได้กำหนด ไม่ได้กำหนด ไม่ได้กำหนด ไม่ได้กำหนด จริง
null วัตถุ ไม่ได้กำหนด ไม่ได้กำหนด เท็จ
น่าน หมายเลข น่าน หมายเลข เท็จ
ผิด บูลีน “เท็จ” สตริง เท็จ
ผิด บูลีน เท็จ บูลีน จริง
“” สตริง “” สตริง จริง
“” สตริง ไม่ได้กำหนด ไม่ได้กำหนด เท็จ

สิ่งหนึ่งที่ควรทราบก็คือสิ่งนี้จะไม่ทำการเปรียบเทียบกับโครงสร้างข้อมูล คุณต้องใช้คำสั่งที่ซับซ้อนกว่านี้เพื่อเปรียบเทียบอาร์เรย์หรืออ็อบเจ็กต์

รายการส่วนใหญ่ที่นี่ประเมินวิธีที่พวกเขาทำเพราะประเภทตรงกันหรือไม่ตรงกัน ข้อยกเว้นประการหนึ่งคือ NaN – สิ่งนี้ประเมินเป็น false เนื่องจากว่า NaN ในทางทฤษฎีสามารถเป็นอะไรก็ได้ - ดังนั้นจึงไม่มีข้อบ่งชี้ว่ามันจะเท่ากันหรือไม่ ดังนั้นจึงประเมินว่าเป็นเท็จ

81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้

ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก

การเปรียบเทียบความไม่เท่าเทียมกันอย่างเข้มงวด

ตัวดำเนินการความไม่เท่าเทียมกันที่เข้มงวดจะแสดงด้วยเครื่องหมายอัศเจรีย์และเครื่องหมายเท่ากับสองตัว (!==) มันจะประเมินว่าทั้งสองค่าไม่เท่ากันในมูลค่าและประเภท

const strictInequalityComparison = (a, b) => {
 console.log(typeof a);
 console.log(typeof b);
 return a !== b;
}
 
strictInequalityComparison("8", 8); //true

strictInequalityComparison ฟังก์ชันในตัวอย่างด้านบนรับค่าสองค่าและคืนค่าว่าทั้งสองค่าไม่เท่ากันหรือไม่

เมื่อมองแวบแรก ค่าต่างๆ จะดูเหมือนเท่ากัน (และไม่เท่ากัน) เนื่องจากทั้งคู่มีค่าเท่ากัน อย่างไรก็ตาม ตัวดำเนินการความไม่เท่าเทียมกันที่เข้มงวด เช่น ตัวดำเนินการความเท่าเทียมกันที่เข้มงวด ก็จะดูที่ประเภทด้วยเช่นกัน

หากเราจะดูที่ a ในตัวอย่างนี้ และดูที่ typeof a มันจะส่งคืน ‘string’ . หากเราทำเช่นเดียวกันกับ b ด้วย typeof b มันจะส่งคืน ‘number’ . เนื่องจากประเภทไม่เหมือนกัน มันจะกลับ true .

การเปรียบเทียบที่ผิดปกติกับ !==

มีการเปรียบเทียบที่ผิดปกติบางอย่างที่สามารถทำได้ด้วยตัวดำเนินการความไม่เท่าเทียมกันที่เข้มงวดใน JavaScript ต่อไปนี้คือคำถามที่มักถูกถามในสถานการณ์สัมภาษณ์:

ตัวถูกดำเนินการ1 ประเภทของ ตัวถูกดำเนินการ1 ตัวถูกดำเนินการ 2 ประเภทของ ตัวถูกดำเนินการ2 คืนค่า
null วัตถุ ว่าง วัตถุ เท็จ
ไม่ได้กำหนด ไม่ได้กำหนด ไม่ได้กำหนด ไม่ได้กำหนด เท็จ
null วัตถุ ไม่ได้กำหนด ไม่ได้กำหนด จริง
น่าน หมายเลข น่าน หมายเลข จริง
ผิด บูลีน “เท็จ” สตริง จริง
ผิด บูลีน เท็จ บูลีน เท็จ
“” สตริง “” สตริง เท็จ
“” สตริง ไม่ได้กำหนด ไม่ได้กำหนด จริง

เช่นเดียวกับตัวดำเนินการความเท่าเทียมกันที่เข้มงวด ไม่สามารถทำการเปรียบเทียบระหว่างอ็อบเจ็กต์หรืออาร์เรย์ได้

อีกสิ่งหนึ่ง…

ในสถานการณ์ส่วนใหญ่ในอาชีพการพัฒนา JavaScript ของคุณ ตัวดำเนินการสองตัวนี้ ===และ !==จะเป็นตัวดำเนินการที่คุณใช้เขียนตรรกะแบบมีเงื่อนไข

การเปรียบเทียบความเท่าเทียมกันที่หลวม

ตัวดำเนินการความเท่าเทียมกันแบบหลวมจะแสดงด้วยเครื่องหมายเท่ากับสองเท่า (==) จุดประสงค์ของโอเปอเรเตอร์นี้คือเพื่อบังคับค่าทั้งสองให้เป็นประเภททั่วไปก่อนที่จะประเมินว่ามีค่าเท่ากันหรือไม่ นี้เรียกว่า การบีบบังคับ หรือ การแปลงประเภท .

const looseComparison = (a, b) => {
 console.log(typeof a);
 console.log(typeof b);
 return a == b;
}
 
strictComparison(8, '8'); //true

looseComparison ฟังก์ชันในตัวอย่างด้านบนรับค่าสองค่าและคืนค่าว่าค่าทั้งสองมีค่าเท่ากันหรือไม่

เมื่อมองแวบแรก ค่าจะไม่เหมือนกันเพราะค่าหนึ่งเป็นตัวเลขและอีกค่าหนึ่งเป็นสตริง อย่างไรก็ตาม ตัวดำเนินการความเท่าเทียมกันที่หลวมจะไม่ดูที่ประเภท คำสั่งจะพยายามบังคับประเภทให้เหมือนกันก่อนที่จะเปรียบเทียบค่า ดังนั้นตัวอย่างจะคืนค่าเป็นจริงเนื่องจากตัวถูกดำเนินการที่สองจะถูกแปลงเป็นตัวเลขแล้วเปรียบเทียบ

การเปรียบเทียบที่ผิดปกติกับ ==

มีการเปรียบเทียบที่ผิดปกติบางอย่างที่สามารถทำได้ด้วยตัวดำเนินการเท่ากับที่เข้มงวดใน JavaScript ต่อไปนี้คือคำถามที่มักถูกถามในสถานการณ์สัมภาษณ์:

ตัวถูกดำเนินการ1 ประเภทของ ตัวถูกดำเนินการ1 ตัวถูกดำเนินการ 2 ประเภทของ ตัวถูกดำเนินการ2 คืนค่า
null วัตถุ ว่าง วัตถุ จริง
ไม่ได้กำหนด ไม่ได้กำหนด ไม่ได้กำหนด ไม่ได้กำหนด จริง
null วัตถุ ไม่ได้กำหนด ไม่ได้กำหนด จริง
น่าน หมายเลข น่าน หมายเลข เท็จ
ผิด บูลีน “เท็จ” สตริง เท็จ
ผิด บูลีน เท็จ บูลีน จริง
“” สตริง “” สตริง จริง
“” สตริง ไม่ได้กำหนด ไม่ได้กำหนด เท็จ

รายการส่วนใหญ่ที่นี่ประเมินเช่นเดียวกับที่ทำในส่วนแรกเกี่ยวกับความเท่าเทียมกันอย่างเคร่งครัด ข้อยกเว้นที่น่าสังเกตคือ null และ ไม่ได้กำหนด เปรียบเทียบอย่างหลวม ๆ ประเมินเป็นจริง

การเปรียบเทียบความไม่เท่าเทียมกันหลวม

ตัวดำเนินการอสมการหลวมแสดงด้วยเครื่องหมายอัศเจรีย์และเครื่องหมายเท่ากับหนึ่งตัว (!=) มันจะประเมินว่าทั้งสองค่าไม่เท่ากันในมูลค่าเท่านั้น โดยพยายามแปลงอาร์กิวเมนต์ทั้งสองให้เป็นประเภทเดียวกัน

 const looseInequalityComparison = (a, b) => {
 console.log(typeof a);
 console.log(typeof b);
 return a != b;
}
 
looseInequalityComparison("8", 8); //false

looseInequalityComparison ฟังก์ชันในตัวอย่างด้านบนรับค่าสองค่าและคืนค่าว่าทั้งสองค่าไม่เท่ากันหรือไม่

เมื่อมองแวบแรก ค่าต่างๆ จะดูเท่ากันเพราะทั้งสองมีค่าเท่ากัน อย่างไรก็ตาม ตัวดำเนินการความไม่เท่าเทียมกันแบบหลวม ๆ เช่น ตัวดำเนินการความเท่าเทียมกันที่หลวม จะบังคับประเภทให้เหมือนกันบนตัวถูกดำเนินการทั้งสองก่อนที่จะเปรียบเทียบ เนื่องจากค่าที่ได้จะเหมือนกันหลังจากการบีบบังคับ มันจะส่งคืน false .

การเปรียบเทียบที่ผิดปกติกับ !=

มีการเปรียบเทียบที่ผิดปกติบางอย่างที่สามารถทำได้ด้วยตัวดำเนินการความไม่เท่าเทียมกันใน JavaScript ต่อไปนี้คือคำถามที่มักถูกถามในสถานการณ์สัมภาษณ์:

ตัวถูกดำเนินการ1 ประเภทของ ตัวถูกดำเนินการ1 ตัวถูกดำเนินการ 2 ประเภทของ ตัวถูกดำเนินการ2 คืนค่า
null วัตถุ ว่าง วัตถุ เท็จ
ไม่ได้กำหนด ไม่ได้กำหนด ไม่ได้กำหนด ไม่ได้กำหนด เท็จ
null วัตถุ ไม่ได้กำหนด ไม่ได้กำหนด เท็จ
น่าน หมายเลข น่าน หมายเลข จริง
ผิด บูลีน “เท็จ” สตริง จริง
ผิด บูลีน เท็จ บูลีน เท็จ
“” สตริง “” สตริง เท็จ
“” สตริง ไม่ได้กำหนด ไม่ได้กำหนด จริง

เช่นเดียวกับตัวดำเนินการความเท่าเทียมกันที่เข้มงวด ไม่สามารถทำการเปรียบเทียบระหว่างอ็อบเจ็กต์หรืออาร์เรย์ได้

รายการส่วนใหญ่ที่นี่ประเมินเช่นเดียวกับในส่วนที่สองเกี่ยวกับความไม่เท่าเทียมกันอย่างเคร่งครัด ข้อยกเว้นที่น่าสังเกตคือ null และ ไม่ได้กำหนด เปรียบเทียบอย่างหลวม ๆ ประเมินว่าเป็นเท็จ

บทสรุป

บทความนี้ได้กล่าวถึงสี่วิธีในการเปรียบเทียบความเท่าเทียมกันใน JavaScript สิ่งสำคัญที่ต้องจำไว้คือ Triple Equals (===) และ double Equals (==) ไม่ใช่ตัวดำเนินการเดียวกัน คนหนึ่งประเมินอย่างเคร่งครัดในประเภทและมูลค่า และอีกคนหนึ่งประเมินเฉพาะค่าหลังจากพยายามบังคับให้ทั้งคู่เป็นประเภทเดียวกัน