void 0

void 0 代替 undefined

why?

首先说下 undefined 的一些不好的地方:

undefined 并不是保留词(reserved word),它只是全局对象的一个属性,在低版本 IE 中能被重写。

var undefined = 10;
 
// undefined -- chrome
// 10 -- IE 8
alert(undefined);

事实上,undefined 在 ES5 中已经是全局对象的一个只读(read-only)属性了,它不能被重写。但是在局部作用域中,还是可以被重写的。

(function() {
  var undefined = 10;
 
  // 10 -- chrome
  alert(undefined);
})();
 
(function() {
  undefined = 10;
 
  // undefined -- chrome
  alert(undefined);
})();

why void 0?

再来说下为什么用void 0 ? > The void operator evaluates the given expression and then returns undefined.

void 运算符能对给定的表达式进行求值,然后返回 undefined。

这里简单介绍下 void 运算符 在JavaScript 中的简单运用,从而可以体会其用法了。

void是javascript中的一个操作符,语法如下: - javascript:void(表达式) - javascript:void 表达式

void会计算表达式的值,但是会丢弃表达式的返回值。

通常被写在’行内js’中,eg :

<a href='javascript:void(0)'>有void链接</a>

当然也写在独立的js代码块中。

void该运算符指定要计算一个表达式但是不论该表达式原来是否有自己的返回值,其返回值都为undefined。void运算符的操作数可以是任意类型。

常常用来使链接变成一个死链接:
<a href = "javascript:void(0)" onclick = "func()">点我</a> 

当点击这个链接的时候,不会发生地址跳转,而执行onclick函数。

与下面代码同功能:

<a href = "#" onclick = "func();return false;">点我</a> 

但是”#“包含了一个位置信息,默认的是返回网页顶部,因此为了避免这种情况,可以在onclick语句中加一条return false语句

总结 void 作用:

  1. 返回undefined,(对于为什么不直接使用undefined,是因为undefined不是关键字,意味着它随时可能被篡改成其他值)
  2. 防止不必要的行为。在页面中有个a标签,但是该a标签又不是为了指向跳转页面的话,这个时候void运算符就派上大大的用场了。
  3. 如下代码:
function tan(){

return 33;

}
console.log(void tan()); // => undefined;
所以用 void 0 代替 undefined 能节省不少字节的大小,事实上,不少 JavaScript 压缩工具在压缩过程中,正是将 undefined 用 void 0 代替掉了。还能防止被重写的尴尬事件。