คำถามติดแท็ก equality-operator

30
ควรใช้โอเปอเรเตอร์ตัวใด (== vs ===) ในการเปรียบเทียบ JavaScript
คำตอบของคำถามนี้เป็นความพยายามของชุมชน แก้ไขคำตอบที่มีอยู่เพื่อปรับปรุงโพสต์นี้ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ฉันกำลังใช้JSLintเพื่ออ่าน JavaScript และมันกลับคำแนะนำมากมายเพื่อแทนที่==(เครื่องหมายเท่ากับสอง) ด้วย===(เครื่องหมายเท่ากับสาม) เมื่อทำสิ่งต่าง ๆ เช่นการเปรียบเทียบidSele_UNVEHtype.value.length == 0ภายในของifคำสั่ง มีประโยชน์ด้านประสิทธิภาพการแทนที่==ด้วย===หรือไม่ การปรับปรุงประสิทธิภาพใด ๆ จะได้รับการต้อนรับเนื่องจากมีตัวดำเนินการเปรียบเทียบหลายตัว หากไม่มีการแปลงประเภทเกิดขึ้นจะมีประสิทธิภาพเพิ่มขึ้น==หรือไม่

15
== และ! = ขึ้นอยู่กับซึ่งกันและกันหรือไม่
ฉันเรียนรู้เกี่ยวกับการดำเนินงานมากใน C ++ และผมเห็นว่า==และ!=เป็นเพียงบางฟังก์ชั่นพิเศษที่สามารถปรับแต่งสำหรับประเภทที่ผู้ใช้กำหนด แม้ว่าข้อกังวลของฉันคือทำไมต้องมีคำจำกัดความแยกจากกันสองประการ ผมคิดว่าถ้าa == bเป็นจริงแล้วa != bเป็นเท็จโดยอัตโนมัติและในทางกลับกันและไม่มีความเป็นไปได้อื่น ๆ เพราะโดยความหมายคือa != b !(a == b)และฉันไม่สามารถจินตนาการถึงสถานการณ์ที่สิ่งนี้ไม่เป็นความจริง แต่บางทีจินตนาการของฉันมี จำกัด หรือฉันไม่รู้อะไรเลย? ฉันรู้ว่าฉันสามารถกำหนดหนึ่งในแง่ของอื่น ๆ แต่นี่ไม่ใช่สิ่งที่ฉันถามเกี่ยวกับ ฉันยังไม่ได้ถามถึงความแตกต่างระหว่างการเปรียบเทียบวัตถุด้วยมูลค่าหรือเอกลักษณ์ หรือว่าวัตถุสองรายการอาจเท่ากันและไม่เท่ากันในเวลาเดียวกัน (นี่ไม่ใช่ตัวเลือกแน่นอน! สิ่งเหล่านี้เป็นสิ่งที่ไม่เกิดร่วมกัน) สิ่งที่ฉันถามคือ: มีสถานการณ์ใดบ้างที่เป็นไปได้ที่การถามคำถามเกี่ยวกับวัตถุสองชิ้นที่เท่ากันนั้นสมเหตุสมผล แต่การถามเกี่ยวกับวัตถุที่ไม่เท่ากันนั้นไม่สมเหตุสมผล (จากมุมมองของผู้ใช้หรือมุมมองของผู้ใช้) หากไม่มีความเป็นไปได้เช่นนั้นเหตุใด C ++ ในโลกจึงให้ผู้ให้บริการสองรายนี้ถูกกำหนดให้เป็นฟังก์ชั่นที่แตกต่างกันสองรายการ


2
ทำไมโอเปอเรเตอร์! = ถูกลบใน C ++ 20 สำหรับไลบรารีมาตรฐานหลายประเภท?
อ้างอิงจากcppreference , std::type_info::operator!=ถูกลบด้วย C ++ 20, แต่std::type_info::operator==ดูเหมือนว่ายังคงอยู่ อะไรคือเหตุผลเบื้องหลัง ฉันอาจเห็นด้วยว่าการเปรียบเทียบความไม่เท่าเทียมนั้นไร้ความหมาย แต่จากนั้นการเปรียบเทียบความเท่าเทียมจะไม่มีความหมายเช่นกันใช่ไหม ในทำนองเดียวกันoperator!=ชนิดไลบรารีมาตรฐานอื่น ๆ อีกมากมายรวมถึงคอนเทนเนอร์เช่นstd::unordered_map::operator!=และstd::unordered_set::operator!=จะถูกลบใน C ++ 20 ตาม cppreference ต้องเขียนif(!(id1 == id2))ไม่ทำให้รหัสใด ๆ ที่ชัดเจนเมื่อเทียบกับif(id1 != id2)ในทางตรงกันข้าม ...

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.