JavaScript中的void运算符有什么意义?

What is the point of void operator in JavaScript?


我见过一些人在他们的代码中使用void运算符。 我也在href属性中看到了这一点:javascript:void(0)似乎没有javascript:;更好


那么,使用void运算符的理由是什么?



其在链接中的使用说明:

This is the reason that bookmarklets
often wrap the code inside void() or
an anonymous function that doesn't
return anything to stop the browser
from trying to display the result of
executing the bookmarklet. For
example:

1
javascript:void(window.open("dom_spy.html"))

If you directly use code that returns
something (a new window instance in
this case), the browser will end up
displaying that:

1
javascript:window.open("dom_spy.html");

In Firefox the above will display:

1
[object Window]



直到ES1.3,才能在JavaScript中直接访问undefined值。


因此包括运算符void 以允许访问该值。


它有时很有用,特别是在使用Web API(例如事件处理程序)时,以确保表达式的结果始终为undefined


undefined属性添加到ES1.3中的全局对象时,void的实用程序变得不明显。


因此你的问题。



考虑以下:

1
2
3
4
5
6
With Void

Without Void

<input type="text" id="foo" value="one fish" />
<input type="text" id="bar" value="no fish" />


第一个链接将交换文本字段的值。第二个链接将打开一个带有"one fish"文本的新页面。如果使用javascript: link,表达式返回nullundefined以外的值时,浏览器会将其解释为链接应该执行的操作。通过将所有表达式/语句包装在void()函数中,可以确保运行整个代码片段。目前,这主要用于Bookmarklets,因为使用onclick属性,或者在单独的Javascript块/文件中设置事件处理程序是"常态"。


对于javascript:javascript:void(),第一个语句是不明确的。你说,"嘿,我想运行一些javascript",但是你没有提供任何代码。浏览器应该在这里做什么并不一定清楚。使用第二个语句,你说"嘿,运行一些javascript",你的代码最终返回undefined,浏览器知道这意味着"什么也不做"。


由于我在这里,我还要指出,使用javascript:javascript:void();已经失去了大多数关心标记的人的青睐。更好的办法是让你的onclick处理程序返回false,并将链接指向一个页面/资源,这对于关闭了javascript或使用NoScript等javascript阻止程序的人来说是有意义的。