[JS] !!expr ตกใจ 2 อัน แล้วทุกอย่างก็กลายเป็น Boolean

เราจะแปลงทุกอย่างในโลก ให้เป็น Boolean ด้วย ตกใจ 2 อัน (ดับเบิลตกใจ) !!expr

Siwawes Wongcharoen
1 min readJun 7, 2022
Double boolean casting

เชื่อว่า หลายคนน่าจะเคยทำอะไรประมาณนี้มาบ้าง นะครับ

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 (พยายามหาแล้วว่าเรียกว่าอะไร แต่ไม่เจอ)

--

--

Responses (1)