วันนี้ผมลองดู 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 ได้ในบางกรณีครับผม
เอาหล่ะปริศนาไขกระจ่างในที่สุด ชะแว้บ ๆ