摘要:如果你有印象,甚至是中的個(gè)關(guān)鍵字之一,根據(jù)官方標(biāo)準(zhǔn),它是一個(gè)一元操作符,它的唯一作用就是返回一個(gè),不管這個(gè)操作符后面?zhèn)鞯牟僮鲾?shù)是什么。關(guān)于數(shù)組中的,還有一些很奇怪的地方,比如,如何區(qū)分下面這兩個(gè)數(shù)組中的各項(xiàng)是不是相同下次再說。
恩,這是個(gè)問題。如果你有印象,void甚至是js中的26個(gè)關(guān)鍵字之一,根據(jù)ECMA官方標(biāo)準(zhǔn),它是一個(gè)一元操作符,它的唯一作用就是返回一個(gè)undefined,不管這個(gè)操作符后面?zhèn)鞯牟僮鲾?shù)是什么。
在標(biāo)準(zhǔn)里對(duì)void的執(zhí)行細(xì)節(jié)是這么說的:
Let expr be the result of evaluating UnaryExpression.--》把表達(dá)式的值賦給expr;
Call GetValue(expr).--》調(diào)用expr的內(nèi)部函數(shù)獲取它的值;
Return undefined. --》返回undefined
這有點(diǎn)像那個(gè)很有意思的笑話:
客官你吃啥?
啊,我要一碗牛肉面,面給我多煮會(huì)少放點(diǎn)蔥多放點(diǎn)辣肉給我放多一點(diǎn)湯給我多盛點(diǎn)。
哦,一碗牛肉面。
void可以像下面這樣使用:
javascriptvoid 0; void "you are useless?"; void false; void []; void /(useless)/ig; void function(){ console.log("you are so useless?"); } //... always return undefined
后面可以是任何表達(dá)式,返回的永遠(yuǎn)是undefined!很明顯,在你想獲得undefined的時(shí)候,可以用這個(gè)操作符。通常有如下使用場(chǎng)景:
一、Javascript URIshtml Click here to do nothing Click here for green background
這是MDN文檔中給出的例子,我之前看到不少遠(yuǎn)古時(shí)代的網(wǎng)頁應(yīng)用這樣的寫法,就是直接在a標(biāo)簽的href屬性里寫js代碼,比如link,這樣寫跟link的區(qū)別是后者在點(diǎn)擊的時(shí)候頁面會(huì)跳到最頂部去,如果這不是你要的效果一定要注意;在href里寫javascript:void(0);則可以避免上述問題。
不過現(xiàn)在這樣寫javascript:是不提倡的。
二、用于閉包避免解析錯(cuò)誤你們一定已經(jīng)看到過閉包的這種寫法:
javascript!function fn(){ console.log("I will show immediately.") }()
上述這段代碼中的!可以換成其他操作符,比如+、-、~,加上這些前綴的作用是避免js解析器講函數(shù)體解析為函數(shù)聲明。
解析器在遇到代碼function fn(){ /*...*/}時(shí)會(huì)把這解析成函數(shù)聲明,在函數(shù)聲明后面再跟著一對(duì)括號(hào)會(huì)產(chǎn)生語法錯(cuò)誤,前面加上一個(gè)操作符,解析器就會(huì)把這段代碼當(dāng)成函數(shù)表達(dá)式,從而可以順利執(zhí)行。
在前面這個(gè)場(chǎng)景中,這個(gè)操作符也可以用void,效果與上述代碼一致。
javascriptvoid function fn(){ console.log("I will show immediately.") }()
那么問題是,為什么不直接使用undefined這個(gè)值的字面量形式呢?
我在stackoverflow上找到一個(gè)解釋:
因?yàn)?b>undefined既不是保留字,也不是關(guān)鍵字,它可以作為變量標(biāo)識(shí)符賦值,所以你手寫出來的undefined是有可能被覆蓋的!比如:
javascriptvar undefined="oops"; alert(undefined);
上述代碼在一些原始社會(huì)的瀏覽器中會(huì)成功彈出oops,說到原始社會(huì)的瀏覽器,我們來試試IE吧。經(jīng)過測(cè)試,這段代碼在IE9以下的瀏覽器中真的會(huì)彈出oops! oops! 你也可以試試。
不過,在現(xiàn)代瀏覽器中,已經(jīng)不能這么做了,仍然可以給undefined賦值,但這個(gè)是無效的。試試跟undefined很類似的null,給它賦值就會(huì)報(bào)錯(cuò)。
所以,當(dāng)我們要獲得真正的undefined值的時(shí)候,用void操作符吧。void后面可以是任何操作數(shù)(注意:如果后面沒有操作數(shù)也會(huì)報(bào)錯(cuò)的),那使用時(shí)用什么呢?良心推薦還是寫void 0吧,畢竟這是最簡(jiǎn)短的。
關(guān)于數(shù)組中的undefined,還有一些很奇怪的地方,比如,如何區(qū)分下面這兩個(gè)數(shù)組中的各項(xiàng)是不是相同:
javascriptvar arr1=[1,2,undefined,4]; var arr2=[1,2,,4]; arr1[2]===arr2[2]; //true
下次再說。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/85782.html
摘要:寫文章不容易,點(diǎn)個(gè)贊唄兄弟專注源碼分享,文章分為白話版和源碼版,白話版助于理解工作原理,源碼版助于了解內(nèi)部詳情,讓我們一起學(xué)習(xí)吧研究基于版本如果你覺得排版難看,請(qǐng)點(diǎn)擊下面鏈接或者拉到下面關(guān)注公眾號(hào)也可以吧原理源碼版之詳解今天我們來看看處 寫文章不容易,點(diǎn)個(gè)贊唄兄弟專注 Vue 源碼分享,文章分為白話版和 源碼版,白話版助于理解工作原理,源碼版助于了解內(nèi)部詳情,讓我們一起學(xué)習(xí)吧研究基于 ...
摘要:但有時(shí)候,所有的鳥都會(huì)想要停在同一邊,皮爾斯就失去了平衡,就會(huì)讓他從鋼索上掉下去。我們這邊假設(shè)兩邊的鳥差異在三個(gè)之內(nèi)的時(shí)候,皮爾斯仍能保持平衡。 Monad 這個(gè)概念好難解釋, 你可以理解為一個(gè) Lazy 或者是狀態(tài)未知的盒子. 聽起來像是薛定諤貓(估計(jì)點(diǎn)進(jìn)去你會(huì)更暈了). 其實(shí)就是的, 在你打開這個(gè)盒子之前, 你是不知道里面的貓?zhí)幵谀欠N狀態(tài). Monad 這個(gè)黑盒子, 里面到底賣的神...
摘要:當(dāng)時(shí),如果老生區(qū)大小超過設(shè)定的值時(shí),就會(huì)報(bào)錯(cuò)。一般是無限制增長的數(shù)組無限制設(shè)置屬性和值大循環(huán)等出處林小新。這部分由于攻城獅并為深入,可以參考如何定位的內(nèi)存泄漏內(nèi)存泄漏以及定位 showImg(https://segmentfault.com/img/bVbnysD?w=649&h=658);↑開局一張圖,故事全靠編↑ 從一次宕機(jī)說起 這是一個(gè)很狗血的故事,故事的開頭是一個(gè)項(xiàng)目,這個(gè)項(xiàng)...
摘要:故事的經(jīng)過是這樣的有一天,產(chǎn)品同學(xué)突發(fā)奇想,他想獲取到下單用戶的地理位置分布,以便來統(tǒng)計(jì)用戶群的分布,進(jìn)而為后期的按地區(qū)精確推廣活動(dòng)來做準(zhǔn)備。 大家好,我是冰茶,容我開場(chǎng)先講個(gè)故事。故事的經(jīng)過是這樣的: 有一天,產(chǎn)品同學(xué)突發(fā)奇想,他想獲取到下單用戶的地理位置分布,以便來統(tǒng)計(jì)用戶群的分布,進(jìn)而為后期的按地區(qū)精確推廣活動(dòng)來做準(zhǔn)備。 me:這個(gè)簡(jiǎn)單啊,下單的時(shí)候,給個(gè)地理定位的請(qǐng)求,來獲取...
摘要:話說誰還干類似的事,就在文章末尾點(diǎn)個(gè)贊代銷店等其實(shí)就是現(xiàn)在的商店,以前小的時(shí)候聽家鄉(xiāng)人叫代銷店,也是一種代理模式??梢哉f是系統(tǒng)中最重要的架構(gòu)之一。 showImg(https://segmentfault.com/img/remote/1460000012278678?w=1240&h=469); PS:轉(zhuǎn)載請(qǐng)注明出處作者: TigerChain地址: http://www.jians...
閱讀 2706·2021-11-08 13:16
閱讀 2382·2021-10-18 13:30
閱讀 2255·2021-09-27 13:35
閱讀 2009·2019-08-30 15:55
閱讀 2458·2019-08-30 13:22
閱讀 597·2019-08-30 11:24
閱讀 2091·2019-08-29 12:33
閱讀 1825·2019-08-26 12:10