JavaScript中的void操作符有什么意义?

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

那么,使用void操作符的理由是什么?

在链接中使用的解释 :

<snip>

这就是bookmarklets经常将代码封装在void()或匿名函数中的原因,它不返回任何东西来阻止浏览器试图显示执行书签的结果。 例如:

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

如果你直接使用返回值的代码(在这种情况下是一个新的窗口实例),浏览器将会显示:

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

在Firefox上面将显示:

 [object Window] 

</snip>

考虑以下:

 <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" /> 

第一个链接将交换文本字段的值。 第二个链接将打开一个新的文本“一条鱼”的页面。 如果使用javascript: link ,expression式返回非nullundefined ,浏览器会将其解释为链接应该执行的操作。 通过将所有expression式/expression式包装在void()函数中,确保您的完整代码片段能够运行。 现在,这主要是在Bookmarklets中使用,因为使用onclick属性,或者在单独的Javascript块/文件中设置事件处理程序是“常态”。

至于javascript: vs javascript:void() ,第一个语句是不明确的。 你是说,“嘿,我想运行一些JavaScript”,但是你不提供任何代码。 浏览器应该在这里做什么不一定清楚。 第二条语句是“嘿,运行一些JavaScript”,并且你的代码最终返回undefined,这个浏览器知道的意思是“什么都不做”。

因为我在这里,我也会指出,使用javascript:javascript:void(); 大多数关注标记的人都失宠了。 更好的办法是让你的onclick处理程序返回false,并且将链接指向一个页面/资源,这对于那些closures了javascript的人或者使用了像NoScript这样的JavaScript拦截器是有意义的。

在ES1.3之前, undefined值不能直接通过JavaScript访问。

因此包含一个运算符void <expression>以允许访问此值。

这有时是有用的,特别是在使用Web API(例如事件处理程序)时,确保expression式的结果始终undefined

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

因此你的问题。