void (0) ??? undefined ???

今天看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上也可以改寫,神奇。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容