跟大家伙儿聊聊我在捣鼓代码时碰到的一个有意思的小玩意儿——javascript:void(0)。我也就是跟着别人写,具体是个也没深究。
记得那天,我正给一个网页加几个链接,需求,就是点击这些链接后,不是跳到别的网页去,而是执行一段我写好的 JavaScript 代码。我用的是 <a> 标签,把链接地址(就是那个 href 属性)设置成 # ,心想这下总行,点击链接后页面应该不会乱跳。结果,还是不行,每次点击,页面虽然没跳到其他地方,但总是会回到页面最顶端,用户体验极差。试一堆方法,都没解决问题。
后来我在网上乱逛,看到有人提到 javascript:void(0) 这个东西,说是可以解决我的问题。于是我就把 <a> 标签里的 href 属性改成 javascript:void(0) ,你猜怎么着?问题还真就解决!点击链接后,页面既不会跳转,也不会回到顶部,完美地执行我想要的那段 JavaScript 代码。当时那个开心,感觉自己又掌握一个新技能。
什么是javascript:void(0)
经过我这一番折腾,算是对 javascript:void(0) 有点儿粗浅的认识。简单来说,它就像是一个占位符,告诉浏览器:“你执行这个链接的时候,啥也别干,就待在原地别动。”
void(0) 又是
- void 是 JavaScript 里的一个操作符,它的作用是,不管你给它它都只返回一个 undefined。
- (0) 在这里就是给 void 的一个参数,你写成 void(1) 、 void(true) 都行,反正都是返回 undefined。
- javascript:void(0) 的意思就是,执行一段 JavaScript 代码,这段代码啥也不干,返回一个 undefined,这样浏览器就不会对页面做任何跳转。
后来我又发现,在想要立即执行一个函数时,也可以使用void运算符。这个操作符,它会对给定的表达式进行求值,然后返回undefined。就是说,使用void运算符后,不管后面的表达式是什么,其结果都会变成undefined。这是因为void运算符对表达式求值后返回undefined。
更现代的解决办法
虽然 javascript:void(0) 解决我的问题,但现在更推荐的做法是使用 *() 。
*() 是啥?它是 JavaScript 中处理事件的一个方法,作用是阻止事件的默认行为。比如,点击 <a> 标签的默认行为是跳转到 href 指定的链接,用 *() 后,这个默认的跳转行为就被阻止。
相比于 javascript:void(0) , *() 更加直观,也更符合现代的 JavaScript 编程习惯。我现在写代码时,如果遇到类似的需求,都会优先使用 *() 。
总结
这回分享就到这里。通过这回实践,我算是弄明白 javascript:void(0) 的用法和原理,也解更现代的解决方案 *() 。虽然 javascript:void(0) 有点老旧,但在某些场景下还是挺有用的。不过作为一名紧跟时代潮流的程序员,我还是更推荐大家使用 *() ,毕竟它更清晰、更语义化嘛
再来个口语化的结尾:这玩意儿,javascript:void(0),你现在知道它是咋回事?不过记住,现在更流行的是 *() !