今天看React的源碼,發(fā)現(xiàn)了一個很有意思的寫法,在
ReactChildren.js中看見了這么一行代碼var child = void 0,這個是出現(xiàn)在React編譯之后的cjs/react.development.js中。在我的認(rèn)知里,void是用來表示一個函數(shù)沒有返回值的。盡然還有這種寫法,是JS的神奇的magic嘛
示例
首先看幾個示例
console.log(void 0);
console.log(void 100);
console.log(void true);
console.log(void alert('test'));
在看打印的結(jié)果
undefined
undefined
undefined
undefined
結(jié)果都是undefined
那么和undefined 做一個比較
console.log((void 0) === undefined); // true
可以發(fā)現(xiàn) void 0 是可以作為undefined 的一個替代
void 運(yùn)算符
查看 MDN 的解釋
void 運(yùn)算符 對給定的表達(dá)式進(jìn)行求值,然后返回 undefined。
這個運(yùn)算符能向期望一個表達(dá)式的值是undefined的地方插入會產(chǎn)生副作用的表達(dá)式。
void 運(yùn)算符通常只用于獲取 undefined的原始值,一般使用void(0)(等同于void 0)。在上述情況中,也可以使用全局變量undefined 來代替(假定其仍是默認(rèn)值)。
直白的講就是會調(diào)用后面的表達(dá)式然后返回一個undefined
做個示例
console.log(void (console.log('test console')));
// test console
// undefined
如果直接寫成 void 0 后面的表達(dá)式?jīng)]有任何操作的話,那么就是無副作用的。
void 和 undefined 的區(qū)別
undefined不是保留字,只是全局對象的一個屬性,在低版本的ie上是可以改寫的,但是我發(fā)現(xiàn)在chrome上也可以改寫,神奇。