一、背景
最近在查看vue3的相关源码,无意中发现作者一种写法
if (key !== void 0) { deps.push(depsMap.get(key)) }
void 0
是什么鬼,记得以前<a href="javascript:void(0)">
这种写法,表示阻止<a>
标签链接跳转。但是代码里void 0
是啥意思
二、翻看API
void operator
The void operator evaluates the given expression and then returns undefined.
中文释义:void 运算符对给定的表达式进行求值,然后返回 undefined。
看到这里就明白了:void
后面无论是什么值,都是返回的undefined
,也就是说这边用void 0
来代替undefined
。
三、为什么用void 0
来代替 undefined
,跟直接写undefined
有什么区别
翻看文档
The undefined global property represents the primitive value undefined. It is one of JavaScript’s primitive types.
中文释义:undefined全局属性表示原始值undefined。它是JavaScript的基本类型之一。
重点:全局属性
或者说重点属性
我们知道在javascript
中只要是对象的属性,那必然有具备三个属性Writable
,Enumerable
,Configurable
分别表示是否可写
、是否可枚举
、是否可配置
。想到这里,我大概知道是什么原因了,又查阅了相关资料,果然是,参考下其他小伙伴的总结:
总结:
为什么要用void 0 替代undefined
①某些情况下用undefined判断存在风险,因undefined有被修改的可能性,但是void 0返回值一定是undefined
②兼容性上void 0 基本所有的浏览器都支持
③ void 0比undefined字符所占空间少。
详细细节部分可阅读这边博文——js冷知识void 0是什么?为什么比undefined好用?