为什么要用void 0代替undefined?

最近在查看ts编译源码的时候,注意到void 0语句,似乎是取代了undefined。该用法在各种源码中大量出现,但一直没研究过为什么。
直接进入正题:为什么要用void 0代替undefined

因为:

  1. undefined不是保留字,它只是全局对象的一个属性,在低版本IE能被重写:
var undefined = 10;
 
// undefined -- chrome
// 10 -- IE 8
alert(undefined);

好气啊~ IE什么事情都能搞出来!是不是不用兼容就可以不考虑了?

  1. undefined在 ES5 中已经是全局对象的一个只读(read-only)属性了,它不能被重写。但是在局部作用域中,还是可以被重写的,所以使用void 0更加稳妥!
(function() {
  var undefined = 10;
  alert(undefined);// 10 -- chrome
})();
 
(function() {
  undefined = 10;
  alert(undefined);// undefined -- chrome
})();

好吧,那为何要用void 0
void运算符能对给定的表达式进行求值,然后返回undefined。也就是说,void后面你随便跟上一个表达式,返回的都是undefined,都能完美代替undefined!其实用void 1void (1+1)void (0) 或者void "hello"void (new Date()) 等等,都是一样的效果。更重要的是,void是不能被重写的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容