void (0) ??? undefined ???


title: void (0) ??? undefined ???
tag:
- js
- magic

今天看React的源码,发现了一个很有意思的写法,在ReactChildren.js中看见了这么一行代码var child = void 0,这个是出现在React编译之后的cjs/react.development.js中。在我的认知里,void是用来表示一个函数没有返回值的。尽然还有这种写法,是JS的神奇的magic嘛

示例

首先看几个示例

console.log(void 0);
console.log(void 100);
console.log(void true);
console.log(void alert('test'));

在看打印的结果

undefined
undefined
undefined
undefined

结果都是undefined

那么和undefined 做一个比较

console.log((void 0) === undefined); // true

可以发现 void 0 是可以作为undefined 的一个替代

void 运算符

查看 MDN 的解释

void 运算符 对给定的表达式进行求值,然后返回 undefined。

这个运算符能向期望一个表达式的值是undefined的地方插入会产生副作用的表达式。
void 运算符通常只用于获取 undefined的原始值,一般使用void(0)(等同于void 0)。在上述情况中,也可以使用全局变量undefined 来代替(假定其仍是默认值)。

直白的讲就是会调用后面的表达式然后返回一个undefined

做个示例

console.log(void (console.log('test console')));

// test console
// undefined

如果直接写成 void 0 后面的表达式没有任何操作的话,那么就是无副作用的。

void 和 undefined 的区别

undefined不是保留字,只是全局对象的一个属性,在低版本的ie上是可以改写的,但是我发现在chrome上也可以改写,神奇。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值