为什么使用void 0 代替 undefined?

AI 概述
void 和 undefined 的区别void 0 代替 undefined 的优势那么现状是否如此呢?最后 如果大家有看过脚手架编译出来的代码,你会发现所有涉及到undefined表达都会被编译成void 0,比如: //源码 const a: number = 1 a === undefined //编译后 "use strict"; var a = 1; a === void 0; void 和 ...
目录
文章目录隐藏
  1. void 和 undefined 的区别
  2. void 0 代替 undefined 的优势
  3. 那么现状是否如此呢?
  4. 最后

如果大家有看过脚手架编译出来的代码,你会发现所有涉及到undefined表达都会被编译成void 0,比如:

//源码
const a: number = 1
a === undefined

//编译后
"use strict";
var a = 1;
a === void 0;

void 和 undefined 的区别

1. undefined 属于基础类型同时还是全局属性。

console.log(window.hasOwnProperty('undefined'))   //true
console.log(window.undefined)  //undefined

在 javascript 中,全局属性是允许被覆盖的,比如你可以:

window.undefined = 1

2. void 属于运算符(类似typeof),运算符只能针对表达式进行求值,不能进行赋值操作。

比如:

var typeof = 1  //Uncaught SyntaxError: Unexpected token 'typeof'

void 0 代替 undefined 的优势

  1. 安全赋值
    从上面的区别中,可以看出用void 0来代替undefined进行赋值确实更安全,所以几乎所有的脚手架工具都集成了 undefined 转 void 0 的能力
  2. 更短 void 0对比undefined,浏览器传输过程中具有更少的字节数

那么现状是否如此呢?

  1. 更安全
    根本原因在于 ECMAScript 5 之前,undefined作为全局属性,是可读写,某些质量不高的库会覆盖 undefined 的值,导致直接赋值 undefined 不符合预期,在 ECMAScript 5 之后,undefined设置成只读,也就不存在上面所说的问题,兼容性方面也基本不存在太大问题。兼容性
  2. 更短
    个人认为写源码场景下非要用void 0代替undefined,阅读起来会带来更大的心智负担,比如

    const a = 1
    if(a === void 0 || a === 1){}
    

    对比节省几个字节的收益,维护和代码 review 成本更高

最后

如果不是需要兼容老旧浏览器(IE8 以下)的场景下,非常不建议用void 0去代替undefined

以上关于为什么使用void 0 代替 undefined?的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。

「点点赞赏,手留余香」

2

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 为什么使用void 0 代替 undefined?

发表回复