我见过一些人void
在他们的代码中使用运算符.我也在href
属性中看到了这一点:javascript:void(0)
这似乎没有任何好处javascript:;
那么,使用void
运营商的理由是什么?
其在链接中的使用说明:
这就是bookmarklet经常将代码包装在void()内部或匿名函数中的原因,该函数不返回任何内容以阻止浏览器尝试显示执行bookmarklet的结果.例如:
javascript:void(window.open("dom_spy.html"))如果您直接使用返回某些内容的代码(在这种情况下是一个新的窗口实例),浏览器将最终显示:
javascript:window.open("dom_spy.html");在Firefox中,上面将显示:
[object Window]
undefined
在ES1.3之前,JavaScript中无法直接访问该值.
void
因此包括运营商以允许访问该值.
它有时很有用,特别是在使用Web API(例如事件处理程序)时,以确保表达式的结果始终如一undefined
.
当undefined
属性被添加到ES1.3中的全局对象时,实用程序void
变得不明显.
因此你的问题.
考虑以下:
With Void Without Void
第一个链接将交换文本字段的值.第二个链接将打开一个带有"one fish"文本的新页面.如果你使用a javascript: link
,表达式返回null
or之外的其他内容undefined
,浏览器会将其解释为链接应该执行的操作.通过将所有表达式/状态包装在void()
函数中,可以确保运行整个代码片段.目前,这主要用于Bookmarklets,因为使用onclick
属性,或在单独的Javascript块/文件中设置事件处理程序是"常态".
至于javascript:
vs. javascript:void()
,第一个陈述含糊不清.你说,"嘿,我想运行一些javascript",但是你没有提供任何代码.浏览器应该在这里做什么并不一定清楚.使用第二个语句,你会说"嘿,运行一些javascript",你的代码最终返回undefined,浏览器知道这意味着"什么都不做".
既然我在这里,我也会指出,大多数关心加价的人都使用javascript:
或者javascript:void();
已经失宠了.更好的办法是让你的onclick处理程序返回false,并将链接指向一个页面/资源,这对于关闭了javascript或使用NoScript等javascript阻止程序的人来说是有意义的.