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式返回非null
或undefined
,浏览器会将其解释为链接应该执行的操作。 通过将所有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
的效用变得不明显。
因此你的问题。