โอเปอเรเตอร์ void เป็น Unary Operator ที่ ประเมินนิพจน์แต่ไม่ส่งค่ากลับ (Return undefined) ใช้เมื่อต้องการรันโค้ดเพื่อ Side Effect โดยไม่ต้องการค่าผลลัพธ์
ไวยากรณ์
void expression void (expression)
ตัวอย่างโค้ด
<html>
<head>
<script>
// ไม่มีการทำงานที่มองเห็นได้
</script>
</head>
<body>
<p>Click the following, This won't react at all...</p>
<a href="javascript:void(alert('Warning!!!'))">Click me!</a>
</body>
</html>
การทำงาน
- User คลิก Link
- Browser รัน
alert('Warning!!!')(Side Effect: แสดง Popup) voidทำให้ผลลัพธ์ของ alert (ซึ่งเป็นundefined) ถูกทิ้ง- Browser ไม่นำทาง (Navigate) ไปหน้าใหม่ เพราะ href คืนค่า undefined
การใช้งานทั่วไป
1. javascript: URLs (หลัก)
<a href="javascript:void(doSomething())">Click</a> // ป้องกัน Browser นำทางไปหน้าใหม่จาก Return Value
2. IIFE (Immediately Invoked Function Expression) แบบไม่ต้องการค่า
void function() {
// initialization code
console.log("Initialized");
}();
3. ป้องกันการ Return ค่าที่ไม่ต้องการ
// Arrow Function implicit return
const btn = document.querySelector('button');
btn.onclick = () => void doSomething(); // ป้องกัน return value leak
4. Bookmarklets
javascript:void((function(){ /* code */ })())
void 0 vs undefined
void 0 === undefined // true // void 0 ใช้แทน undefined ใน Code Golf / Minification // ปลอดภัยกว่า undefined (undefined อาจถูก Override ได้ใน ES3)
ข้อควรระวัง
- ไม่ควรใช้ใน href สำหรับ Link ปกติ (Accessibility, SEO, UX แย่) ควรใช้
<button>+ Event Handler แทน voidมี Precedence ต่ำ ต้องใช้วงเล็บถ้ารวมกับ Operator อื่น:void (a + b)- ใน Strict Mode ก็ทำงานเหมือนเดิม
ตัวเลือกที่ดีกว่า (Modern)
// แทน
// หรือ
Link
// หรือใช้ Event Listener
element.addEventListener('click', e => {
e.preventDefault();
doSomething();
});