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上也可以改写,神奇。

你可能感兴趣的:(前端)