今天小编发现在一些编程规范中,为什么要求用void 0 替代 undefined?void 0 是什么?今天我们来了解一下这个问题。
void 是一个运算符,用于获取原始数据类型undefined,它还可以将function关键字识别为函数表达式(立即执行函数),void 0还可以用于箭头函数以避免泄露。
我们在控制台查看一下:void 0 === undefined ,他们两个是全等的。所以完全可以做替换。但是为什么好好的undefined不用,而用void 0 呢?
在vue的源码中,创建一个空节点的函数:
var createEmptyVNode = function (text) {
// 这里的 void 0 代替 undefined
if (text === void 0) text = '';
var node = new VNode();
node.text = text;
node.isComment = true;
return node
};
我们看一下接下来这个例子
function test(){
let undefined = "测试";
console.log(undefined); // "测试"
console.log(void 0); // undefined
}
由上面的例子可以看出来:undefined是可以被改写的,而void 0则不会受影响,一直代表undefined。
这里需要注意的是:
undefined并不是保留字,它只是全局对象的一个属性,在低版本IE中能被重写,所以很多框架中,为了兼容低版本的浏览器,就会使用void 0 代替 undefined;
undefined 在 ES5 中已经是全局对象的一个只读属性了,他不能被重写,但是在局部作用域中,还是可以被重写的。
更多关注我的微信公众号: