Double exclamation point (!!) in JavaScript -- !! มันคืออะไร?

วันนี้ผมลองดู code ของ prototype.js (http://prototypejs.org/)
เห็นตรงนี้ครับ

  BrowserFeatures: {
    XPath: !!document.evaluate,
    SelectorsAPI: !!document.querySelector,
    ElementExtensions: !!window.HTMLElement,
    SpecificElementExtensions:
      document.createElement('div')['__proto__'] &&
      document.createElement('div')['__proto__'] !==
        document.createElement('form')['__proto__']
  },

ก็งงว่า !! คืออะไร เป็นเครื่องหมายที่ผมไม่รู้จักเหรอ
พอนึก ๆ ดู อืม... มันก็คือ not not ซึ่งก็คือทำให้ได้ค่า boolean เหมือนเดิม

ถ้าด้านขวาเป็น true ค่าที่ออกมามันก็ true
ถ้าด้านขวาเป็น false ค่าที่ออกมาก็เป็น false นี่นา

แล้วเค้าทำไปทำไมหละ?

เรื่องนี้มันมีเบื้องหลังครับ ไม่ได้ใส่กันมั่ว ๆ นะ

การใส่ double exclamation point (!!) ให้กับ expression ใด ๆ ของ JavaScript
จะเปรียบเสมือนการแปลงค่า (type cast) ให้กับ expression นั้น ๆ ให้เป็น boolean ครับ

เพราะถ้าเราไม่ใช้ !! ค่าที่ได้จาก expression อาจจะได้เป็นค่าชนิดอื่น
ซึ่งอาจจะทำให้เกิด bug ได้ในบางกรณีครับผม

เอาหล่ะปริศนาไขกระจ่างในที่สุด ชะแว้บ ๆ