[JS] !!expr ตกใจ 2 อัน แล้วทุกอย่างก็กลายเป็น Boolean
เราจะแปลงทุกอย่างในโลก ให้เป็น Boolean ด้วย ตกใจ 2 อัน (ดับเบิลตกใจ) !!expr
1 min readJun 7, 2022
เชื่อว่า หลายคนน่าจะเคยทำอะไรประมาณนี้มาบ้าง นะครับ
function TrueOrFalse () { // option 1
// sql operations
return rows.affectedRows // 0 row means false, else true
}
เป้าหมายคือ ต้องการให้ Function TrueOrFalse ตอบมาเป็น Boolean ถ้า rows.affectedRows มีค่าเป็น 0 เอาอยากให้ตอบเป็น False แต่ถ้าเป็นค่าอื่นให้ตอบเป็น True
ตอนเราเอาผลไปใช้งาน สิ่งที่เราเอาไปใช้ จะไม่ใช่ Boolean ซึ่งจะผิดไปจากความตั้งใจของเรา
ซึ่งอาจจะแก้ด้วยการเขียนอะไรที่มันขัดตาไป เช่น
function TrueOrFalse () { // option 2
// sql operations
return rows.affectedRows !== 0 // 0 row means false, else true
}function TrueOrFalse () { // option 3
// sql operations
return rows.affectedRows ? true : false // 0 row means false, else true
}
แนวทางการแก้ปัญหานี้คือการใช้ ! (Logical NOT) จำนวน 2 ครั้ง
- ครั้งแรก เพื่อ Cast ค่าเป็น Boolean ที่ให้ผลตรงกันข้ามก่อน
- ครั้งหลัง เพื่อ Convert ค่ากลับไปเป็นแบบที่ต้องการ
เมื่อเขียนใหม่ จะได้แบบนี้
function TrueOrFalse () {
// sql operations
return !!rows.affectedRows // 0 row means false, else true
}
ข้อควรจำ
! คือ Logical NOT
!! ไม่น่าจะเรียกว่า Logical NOT NOT (พยายามหาแล้วว่าเรียกว่าอะไร แต่ไม่เจอ)