前端开发中,我们经常会用到 <a> 标签,但是想阻止他的默认行为。如点击超链接时阻止在新标签中访问 href 所定义链接的行为,此时通常会有两种做法:

1
2
1. <a href = "#">点我</a>
2. <a href = "javascript:void(0)">点我</a>

我们来分别探讨一下这两种方式分别发生了什么。

「 # 」

正如 jQuery 的选择器,# 代表的是某一位置信息,在页面很长的时候会使用 # 来定位页面的具体位置,格式为:# + id。

默认的锚是 #top 也就是网页的上端,所以 href = “#” 的含义就是定位到页面上端。

javascript:void(0)

「javascript:」是伪协议,表示 url 的内容通过 JavaScript 执行。void(0) 表示不作任何操作,这样会防止链接跳转到其他页面。这么做往往是为了保留链接的样式,但不让链接执行实际操作。

JavaScript 中 void 操作符将运行给定的表达式,并且返回 undefined 。如下实例将输出:

a = undefined,b = 5,c = 7
1
2
3
4
5
function getValue(){
  var a,b,c;
  a = void ( b = 5, c = 7 );
  document.write('a = ' + a + ' b = ' + b +' c = ' + c );
}

当用户链接时,void(0) 计算为 0,但 Javascript 上没有任何效果。

小结

# 是位置的锚点信息,所以当超链接采用 # 方式时,页面可能会发生滚动,所以建议采用 href = "javascript:void(0)" 方式,语义上也更加精确一些。