转载:http://www.cnblogs.com/ziyunfei/archive/2012/09/23/2698607.html
javascript中void是一个操作符,该操作符的作用是计算一个表达式但是返回undefined

void 操作符用法格式如下:
1、void expression;
2、void (expression);
expression 是一个标准的 javascript 表达式。表达式外侧的圆括号是可选的,但是写上去是一个好习惯,有时候也很有用。
> void 0
undefined
> void(0)
undefined

> void 4+7  // 由于void比+优先级更高,所以该表达式被解析为(void 4)+7
NaN
> void(4+7)
undefined

> var x;
> x = 3;
3
> void(x = 5);
undefined
> x
5

void是个运算符,而不是函数,它不能被重新定义,如果自定义一个void函数,会抛出异常,像下面这样:

>function void(expr) { // 这里会报错
     return undefined;
 }
SyntaxError: Unexpected token void

javascript中其他的关键字和保留字作为函数声明的函数名时也一样会报错。

 

void的三种用途:

  1. void 0代替undefined
  2. 书签小程序
  3. 在链接中执行JavaScript代码

用途1: 用void 0代替undefined

用途2: 书签小程序

书签小程序(Bookmarklets)是一个能够执行JavaScript代码的URI(译者注:使用JavaScript伪协议).如果一个bookmarklet返回的结果不是undefined,那么当前页面显示的内容会被这个返回值替代.这时候就得用到void运算符.[Webkit内核的浏览器不会有这样的麻烦]:

  • javascript:3+4 会把当前页面的内容替换成7.
  • javascript:void(3+4) 不会改变当前页面的内容.void会“隐藏”掉表达式3+4的结果.

类似的:

  • javascript:window.open("http://www.whitehouse.gov/") 会替换掉当前页面的内容.
  • javascript:void window.open("http://www.whitehouse.gov/") 不会改变当前页面的内容.

更复杂的例子:这个bookmarklet可以把当前页面的URL提交到submit.example.com:

javascript:void window.open("http://submit.example.com/submit?"+encodeURIComponent(document.location.href))

这个bookmarklet不会改变当前页面的内容,会在新标签或新窗口中打开页面.

译者注:网上有很多流行的Bookmarklet,通常是导入了另外一个js文件,比如繁体字转换成简体字,比如购物网站比价.

javascript: void(document.body.appendChild(document.createElement("script")).src = "http://tongwen.openfoundry.org/NewTongWen/tools/bookmarklet_cn2.js")

用途3: 阻止超链接的默认跳转行为

<a href="javascript:void computeResult()">Compute</a>

如果函数computeResult()返回undefined(或者没有return语句,也默认返回undefined),则不会有什么事.但如果这个函数返回了其他的值,那么你必须在函数前面添加void运算符来防止它改变当前页面的内容。更常见的用法是:javascript:void(0)。

最后举几个小例子:

1、

<a href="javascript:3+7;alert('world');">单击此处什么也不会发生</a>

不管是webkit内核的浏览器还是非webkit内核的浏览器,都会首先执行3+7,结果是10;然后执行alert函数,其返回undefined,故什么也不会发生。

2、

<a href="javascript:3+7;">3+7</a>

webkit内核的浏览器执行3+7,结果是10,但是不会将当前页面替换为10;非webkit内核的浏览器执行3+7,结果是10,会将当前页面替换为10。

3、

<a href="#">单击此处返回网页顶部</a>

单击返回顶部,其实是#top(top是默认值)。