国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

sherlock221 / 2078人閱讀

摘要:如果你有印象,甚至是中的個關(guān)鍵字之一,根據(jù)官方標(biāo)準(zhǔn),它是一個一元操作符,它的唯一作用就是返回一個,不管這個操作符后面?zhèn)鞯牟僮鲾?shù)是什么。關(guān)于數(shù)組中的,還有一些很奇怪的地方,比如,如何區(qū)分下面這兩個數(shù)組中的各項是不是相同下次再說。

恩,這是個問題。如果你有印象,void甚至是js中的26個關(guān)鍵字之一,根據(jù)ECMA官方標(biāo)準(zhǔn),它是一個一元操作符,它的唯一作用就是返回一個undefined,不管這個操作符后面?zhèn)鞯牟僮鲾?shù)是什么。
在標(biāo)準(zhǔn)里對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

這有點像那個很有意思的笑話:

  

客官你吃啥?
啊,我要一碗牛肉面,面給我多煮會少放點蔥多放點辣肉給我放多一點湯給我多盛點。
哦,一碗牛肉面。

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的時候,可以用這個操作符。通常有如下使用場景:

一、Javascript URIs
html
  Click here to do nothing



  Click here for green background

這是MDN文檔中給出的例子,我之前看到不少遠(yuǎn)古時代的網(wǎng)頁應(yīng)用這樣的寫法,就是直接在a標(biāo)簽的href屬性里寫js代碼,比如link,這樣寫跟link的區(qū)別是后者在點擊的時候頁面會跳到最頂部去,如果這不是你要的效果一定要注意;在href里寫javascript:void(0);則可以避免上述問題。

不過現(xiàn)在這樣寫javascript:是不提倡的。

二、用于閉包避免解析錯誤

你們一定已經(jīng)看到過閉包的這種寫法:

javascript!function fn(){
  console.log("I will show immediately.")
}()

上述這段代碼中的!可以換成其他操作符,比如+-~,加上這些前綴的作用是避免js解析器講函數(shù)體解析為函數(shù)聲明。

  

解析器在遇到代碼function fn(){ /*...*/}時會把這解析成函數(shù)聲明,在函數(shù)聲明后面再跟著一對括號會產(chǎn)生語法錯誤,前面加上一個操作符,解析器就會把這段代碼當(dāng)成函數(shù)表達(dá)式,從而可以順利執(zhí)行。

在前面這個場景中,這個操作符也可以用void,效果與上述代碼一致。

javascriptvoid function fn(){
  console.log("I will show immediately.")
}()

那么問題是,為什么不直接使用undefined這個值的字面量形式呢?
我在stackoverflow上找到一個解釋:
因為undefined既不是保留字,也不是關(guān)鍵字,它可以作為變量標(biāo)識符賦值,所以你手寫出來的undefined有可能被覆蓋的!比如:

javascriptvar undefined="oops";
alert(undefined);

上述代碼在一些原始社會的瀏覽器中會成功彈出oops,說到原始社會的瀏覽器,我們來試試IE吧。經(jīng)過測試,這段代碼在IE9以下的瀏覽器中真的會彈出oops! oops! 你也可以試試。
不過,在現(xiàn)代瀏覽器中,已經(jīng)不能這么做了,仍然可以給undefined賦值,但這個是無效的。試試跟undefined很類似的null,給它賦值就會報錯。

所以,當(dāng)我們要獲得真正的undefined值的時候,用void操作符吧。void后面可以是任何操作數(shù)(注意:如果后面沒有操作數(shù)也會報錯的),那使用時用什么呢?良心推薦還是寫void 0吧,畢竟這是最簡短的。

關(guān)于數(shù)組中的undefined,還有一些很奇怪的地方,比如,如何區(qū)分下面這兩個數(shù)組中的各項是不是相同:

javascriptvar arr1=[1,2,undefined,4];
var arr2=[1,2,,4];
arr1[2]===arr2[2]; //true

下次再說。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/85782.html

相關(guān)文章

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

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

    lsxiao 評論0 收藏0
  • 你造 Promise 就是 Monad 嗎

    摘要:但有時候,所有的鳥都會想要停在同一邊,皮爾斯就失去了平衡,就會讓他從鋼索上掉下去。我們這邊假設(shè)兩邊的鳥差異在三個之內(nèi)的時候,皮爾斯仍能保持平衡。 Monad 這個概念好難解釋, 你可以理解為一個 Lazy 或者是狀態(tài)未知的盒子. 聽起來像是薛定諤貓(估計點進去你會更暈了). 其實就是的, 在你打開這個盒子之前, 你是不知道里面的貓?zhí)幵谀欠N狀態(tài). Monad 這個黑盒子, 里面到底賣的神...

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

    摘要:當(dāng)時,如果老生區(qū)大小超過設(shè)定的值時,就會報錯。一般是無限制增長的數(shù)組無限制設(shè)置屬性和值大循環(huán)等出處林小新。這部分由于攻城獅并為深入,可以參考如何定位的內(nèi)存泄漏內(nèi)存泄漏以及定位 showImg(https://segmentfault.com/img/bVbnysD?w=649&h=658);↑開局一張圖,故事全靠編↑ 從一次宕機說起 這是一個很狗血的故事,故事的開頭是一個項目,這個項...

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

    摘要:故事的經(jīng)過是這樣的有一天,產(chǎn)品同學(xué)突發(fā)奇想,他想獲取到下單用戶的地理位置分布,以便來統(tǒng)計用戶群的分布,進而為后期的按地區(qū)精確推廣活動來做準(zhǔn)備。 大家好,我是冰茶,容我開場先講個故事。故事的經(jīng)過是這樣的: 有一天,產(chǎn)品同學(xué)突發(fā)奇想,他想獲取到下單用戶的地理位置分布,以便來統(tǒng)計用戶群的分布,進而為后期的按地區(qū)精確推廣活動來做準(zhǔn)備。 me:這個簡單啊,下單的時候,給個地理定位的請求,來獲取...

    CastlePeaK 評論0 收藏0
  • 人人都會設(shè)計模式:代理模式--Proxy

    摘要:話說誰還干類似的事,就在文章末尾點個贊代銷店等其實就是現(xiàn)在的商店,以前小的時候聽家鄉(xiāng)人叫代銷店,也是一種代理模式。可以說是系統(tǒng)中最重要的架構(gòu)之一。 showImg(https://segmentfault.com/img/remote/1460000012278678?w=1240&h=469); PS:轉(zhuǎn)載請注明出處作者: TigerChain地址: http://www.jians...

    tuniutech 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<