成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

void關(guān)鍵字有個(gè)毛用?

sherlock221 / 2080人閱讀

摘要:如果你有印象,甚至是中的個(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 URIs
html
  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

相關(guān)文章

  • 【Vue原理】VModel - 源碼版 之 select 詳解

    摘要:寫文章不容易,點(diǎn)個(gè)贊唄兄弟專注源碼分享,文章分為白話版和源碼版,白話版助于理解工作原理,源碼版助于了解內(nèi)部詳情,讓我們一起學(xué)習(xí)吧研究基于版本如果你覺得排版難看,請(qǐng)點(diǎn)擊下面鏈接或者拉到下面關(guān)注公眾號(hào)也可以吧原理源碼版之詳解今天我們來看看處 寫文章不容易,點(diǎn)個(gè)贊唄兄弟專注 Vue 源碼分享,文章分為白話版和 源碼版,白話版助于理解工作原理,源碼版助于了解內(nèi)部詳情,讓我們一起學(xué)習(xí)吧研究基于 ...

    lsxiao 評(píng)論0 收藏0
  • 你造 Promise 就是 Monad 嗎

    摘要:但有時(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è)黑盒子, 里面到底賣的神...

    張率功 評(píng)論0 收藏0
  • 【Copy攻城獅日志】聊聊JavaScript heap out of memory

    摘要:當(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)...

    paulquei 評(píng)論0 收藏0
  • 我是如何獲取到前端用戶的IP,并根據(jù)IP來獲取地理定位的

    摘要:故事的經(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)求,來獲取...

    CastlePeaK 評(píng)論0 收藏0
  • 人人都會(huì)設(shè)計(jì)模式:代理模式--Proxy

    摘要:話說誰還干類似的事,就在文章末尾點(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...

    tuniutech 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<