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