void 0 与 undefined的区别

1,995 阅读1分钟

void 0 与 undefined的区别

看ts编译产物的时候看到这样一段代码

if (distanceInMeters === void 0) { distanceInMeters = 45; }

void 0 返回undefined,我们都知道的,但是为什么不直接 distanceInMeters === undefined?查找相关资料后总结如下:

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

(function() {
  var undefined = 10;

// 10 -- chrome alert(undefined); })();

(function() { undefined = 10;

// undefined -- chrome alert(undefined); })();

2.为什么选择void 0 作为undefined的替代 MDN中对void有这么一段说明:

The void operator evaluates the given expression and then returns undefined.

void 运算符能对给定的表达式进行求值,然后返回 undefined。也就是说,void 后面你随便跟上一个表达式,返回的都是 undefined,如 void (2), void (‘hello’)。并且void是不能被重写的。但为什么是void 0 呢,void 0 是表达式中最短的。用 void 0 代替 undefined 能节省字节。不少 JavaScript 压缩工具在压缩过程中,正是将 undefined 用 void 0 代替掉了。