HTML笔记 ·

void 0 和undefined的区别

在看一些代码中,我们会发现一些变量的赋值使用的是void 0,并且有的编程规范要求用 void 0 代替 undefined。在谈两者之前的区别前,我们先来看一下void是个啥

void

void 是一元运算符,它可以出现在任意类型的操作数之前执行操作数,却忽略操作数的返回值,返回一个 undefined。void常用于HTML脚本中执行 JavaScript 表达式,但不需要返回表达式的计算结果。

var a = b = c = 2;  //定义并初始化变量的值
d = void (a -= (b *= (c += 5)));  //执行void运算符,并把返回值赋予变量d
console.log(a);  //返回-12
console.log(b);  //返回14
console.log(c);  //返回7
console.log(d);  //返回undefined

void运算符优先级比较高,需要将后面的值用小括号括起来。
我们再来看下面一段代码

console.log(void 0 === undefined)// true

至此我们会发现void 0 和undefined 是相等的,那么我们为何有编程规范强制要使用void 0 代替 undefined呢?
大家可以去MDN上了解一下undefined的定义:undefined是全局对象的一个属性,也就是说,它是全局作用域中的一个变量,undefined的最初值就是原始数据类型undefined。

另外需要注意的是:ES5之后的标准中,规定了全局变量下的undefined值为只读,不可改写的,但是局部变量中依然可以对之进行改写。

function changeUndefined () {
    var undefined = 1;
    console.log(undefined);
}
changeUndefined(); // 1

而void 0无论什么时候都是返回undefined,这样来看,使用void 0来代替undefined就比较稳妥,不会出错。

参与评论