在页面中经常可以看到<a href=javascript:void(0);>xxx</a>或者是<a href=javascript:;>xxx</a>。一般这样写都是为了阻止a标签导致的页面跳转,同时通过a标签增强交互效果。这两者都是应用了javascript:伪协议。

javascript: 伪协议

javascript:伪协议告诉浏览器这是一段javascript语句,当点击地址为javscript伪协议的a标签时,浏览器会跳转到一个新页面,同时将js语句的执行结果输出到这个新页面中,但是,如果js语句的结果为undefined,浏览器将不会跳转,因此通常根据这个原理来阻止a标签导致的页面跳转。

javascript:伪协议的缺点

但是上面所说的这个用途并不符合标准,虽然它很实用。因为我们完全可以用css以及其他的html标签来构造a标签的点击效果。而且在ie6浏览器中,点击带有javascript伪协议的链接会导致页面中的GIF图片暂停。

关于void(0)

语法格式是 void expression或者void(expression)
void操作符的作用是执行js语句,并返回undefined原始值
经常用在两个地方,第一就是上面所说的阻止a标签跳转,因为void(0)返回的是undefined,另一种就是立即执行函数

void function iife() {
    var bar = function () {};
	var baz = function () {};
	var foo = function () {
    	bar();
    	baz();
 	};
	var biz = function () {};
	foo();
	biz();
}();

关于javascript:;

一个空的js语句,浏览器解析的时候自然会返回undefined,也达到了阻止a标签跳转的目的。

两者区别

从目的上来说两者都是一样的,这两者哪个更好,目前也没有一的定论,但是大部分会推荐使用void(0),个人觉得是因为这样写更加直观和标准。毕竟void(0)是直接返回了undefined的原始值。