這幾天看koa源碼的時候,經??吹?b>if(~notfound.indexOf(err.code)){ doSomeing... }這種在一個表達式前面加~號的,今天就來扒一扒這已黑魔法。
~ 取反操作符不熟悉原碼,反碼,補碼的小伙伴可以先看一下這篇文章原碼、反碼、補碼,計算機中負數的表示
在javascript中,假設有一個變量var a = 1, 那么~a + a = -1, 也就是說現在~a = -2
先上一段代碼
var arr = ["zank", "ywwhack"] if(~arr.indexOf("zank")){ console.log("found"); }else{ console.log("not found"); }
這段代碼最后會輸出found,說明~arr.indexOf("zank")等價于arr.indexOf("zank")>-1
還記得剛才的~a+a = -1么,其實用的就是這個原理。arr.indexOf()調用后,如果沒找到會返回-1,否則返回一個大于-1的整數。
假設a = arr.indexOf(),那么如果arr中存在所查找的元素時,a=-1,那么~a=0,上面代碼可以改寫如下:
var arr = ["zank", "ywwhack"], a = arr.indexOf("zank"), //a = 0 exist = ~a; // exist = -1, //只有當a = -1時,即arr中不存在查找的元素,exist=0,其余的exist都為負值 if(exist){ console.log("found"); }else{ console.log("not found"); }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/85667.html
摘要:我打算把一些上使用的高級技巧寫成你不知道的這一系列的博文,希望大家一起學習學習。在代碼中使用的最簡單的用法就是寫個在控制臺打印一行消息。跟的區別在于會對輸出的對象進行展開。用于顯示一組的控制臺輸出,要搭配來使用。 Web前端開發過程中必然會用到Chrome瀏覽器自帶的開發者工具Chrome DevTools,使用它作為Web前端開發性能調試的必備工具。就連隔壁的產品小哥都知道打開F12...
摘要:在學習之前,我們必須對的作用和使用方法有所了解,可以參考我前一篇文章快速理解中的用法與陷阱。和的作用十分相似,只是參數類型上的差別,以適應不同的使用場景。 在學習apply()之前,我們必須對this的作用和使用方法有所了解,可以參考我前一篇文章《快速理解JavaScript中this的用法與陷阱》。當然如果你已經熟悉this的相關知識,那么請直接往下看。 call()和apply()...
摘要:的偽類選擇器和偽元素選擇器,讓有了更為強大的功能。劃重點,它或它的后代獲得焦點。另外,劃重點,這個偽類是仍處于實驗室的方案。最后感謝耐心讀完。CSS 的偽類選擇器和偽元素選擇器,讓 CSS 有了更為強大的功能。 偽類大家聽的多了,偽元素可能聽到的不是那么頻繁,其實 CSS 對這兩個是有區分的。 有個錯誤有必要每次講到偽類都提一下,有時你會發現偽類元素使用了兩個冒號 (::) 而不是一個冒...
摘要:在這個過程中,會用到一些解析工具用來預處理一些模塊以及拓展語言例如這些工具的配置使用都是在中完成的。屬性,表示進行轉換時,應該使用哪個。插件接口功能極其強大,可以用來處理各種各樣的任務。 對于前端工程化,webpack一個神奇的工具,既然是個神奇的工具。那我們保留我們的好奇心,來聊一聊它,首先我們要搞清楚webpack到底是用來解決什么問題的,然后我們來看看它到底是怎么做的,最后來看看...
摘要:最近經常在項目中經??吹絼e人用處理數據,很是牛掰,很夢幻,不如自己琢磨琢磨。初始值或者計算結束后的返回值。當前元素所屬的數組對象。傳遞給函數的初始值,相當于的初始值。 showImg(https://user-gold-cdn.xitu.io/2018/9/4/165a52f4bf93fbf4?w=6000&h=3000&f=jpeg&s=3043490); 最近經常在項目中經常看到別...
閱讀 3469·2021-09-02 09:53
閱讀 1793·2021-08-26 14:13
閱讀 2750·2019-08-30 15:44
閱讀 1313·2019-08-30 14:03
閱讀 1962·2019-08-26 13:42
閱讀 3014·2019-08-26 12:21
閱讀 1302·2019-08-26 11:54
閱讀 1899·2019-08-26 10:46