xem xét như sau:
<a href="javascript:void(fish=document.getElementById('foo').value);void(document.getElementById('bar').value=fish);">With Void</a>
<a href="javascript:fish=document.getElementById('foo').value;document.getElementById('bar').value=fish;">Without Void</a>
<input type="text" id="foo" value="one fish" />
<input type="text" id="bar" value="no fish" />
Các liên kết đầu tiên sẽ trao đổi các giá trị của các trường văn bản. Liên kết thứ hai sẽ mở một trang mới với văn bản "một con cá". Nếu bạn sử dụng javascript: link
, phút biểu thức trả về một cái gì đó khác với null
hoặc undefined
, trình duyệt sẽ hiểu đó là những gì liên kết nên thực hiện. Bằng cách gói tất cả các biểu thức/số liệu trong một hàm void()
, bạn đảm bảo toàn bộ đoạn mã của mình sẽ chạy. Những ngày này, điều này chủ yếu được sử dụng trong Bookmarklets, như sử dụng một thuộc tính onclick
, hoặc thiết lập xử lý sự kiện trong các khối/tệp Javascript riêng biệt là "tiêu chuẩn".
Đối với javascript:
và javascript:void()
, câu đầu tiên không rõ ràng. Bạn đang nói, "này, tôi muốn chạy một số javascript", nhưng sau đó bạn không cung cấp bất kỳ mã nào. Nó không nhất thiết phải rõ ràng trình duyệt nên làm gì ở đây. Với câu lệnh thứ hai bạn đang nói "này, chạy một số javascript" và mã của bạn cuối cùng trả về không xác định, mà trình duyệt biết nghĩa là "không làm gì cả".
Vì tôi ở đây, tôi cũng sẽ chỉ ra rằng việc sử dụng javascript:
hoặc javascript:void();
đã không còn phù hợp với hầu hết những người quan tâm đến đánh dấu. Điều tốt hơn để làm là để trình xử lý onclick của bạn trả về false và có liên kết trỏ tới trang/tài nguyên có ý nghĩa đối với những người đã tắt javascript hoặc đang sử dụng trình chặn javascript chẳng hạn như NoScript.
Nguồn
2009-03-20 16:54:37
void là toán tử không trả về gì sau khi đánh giá biểu thức đã cho, bạn không cần sử dụng "(" và ")" để làm cho nó hoạt động. – Cleiton
sizeof giống nhau trong C - nhưng mã đó rõ ràng hơn nhiều nếu dấu ngoặc đơn được sử dụng. – olliej
'void' được sử dụng không thường xuyên. Trong ES5 nó được coi là lỗi thời. Sau khi đánh giá toán hạng của nó, nó trả về 'undefined' – jjpcondor