void 0与undefined

50 阅读1分钟

首先看看void运算符是干嘛的,以及来看void 0和undefined的关系:

void: 执行一个表达式,不返回任何值(即输出undefined)

b = void (a = 5);
console.log(a, b); // 5  undefined

void 0 === undefined    // true

我们知道,void 0表达式的返回值就是undefined,所以你会看到有些代码里面用void 0 代替 undefined,那么对比undefined,为什么选择用void 0呢 ?

  • 避免undefined作为变量被重写

undefined在局部作用域下会被重写(全局作用于只读)

var undefine = 1;
console.log(undefined, typeof undefined);       // undefined 'undefined'
function test() {
    var undefined = 1;
    console.log(undefined, typeof undefined);   // 1 'number'
}
test();

<IE浏览器8及以下版本undefined在全局作用域可读写> image.png

  • 更短的字节长度
console.log('void 0'.length, 'undefined'.length); // 6  9

扩展: void还可以用于a标签点击防止跳转,因为返回false

<a href="javascript:void 0">跳转</a>