JS通過(guò)位運(yùn)算實(shí)現(xiàn)權(quán)限加解密
首先介紹一下js中的位運(yùn)算:
1. "&" :與運(yùn)算,轉(zhuǎn)化為二進(jìn)制數(shù),如果相同位數(shù)都為1則得結(jié)果為1,否則為0;
2. "|" :或運(yùn)算,轉(zhuǎn)化為二進(jìn)制數(shù),如果相同位數(shù)只要有一個(gè)為1則得結(jié)果為1,否則為0;
3. "^" :異或運(yùn)算,轉(zhuǎn)化為二進(jìn)制數(shù),如果相同位數(shù)不同則得結(jié)果為1,否則為0;
4."<<" 異位運(yùn)算符,1<<1,表示將1左移一位,也就是010,在二進(jìn)制中代表2;
順便說(shuō)一下,十進(jìn)制數(shù)字互相轉(zhuǎn)化。
十進(jìn)制轉(zhuǎn)為別的進(jìn)制:
var num = 123; console.log(num.toString(2)) console.log(num.toString(8))//參數(shù)傳想要轉(zhuǎn)化的位數(shù)
別的進(jìn)制轉(zhuǎn)化為十進(jìn)制:
var num = 110; console.log(parseInt(num,2))//二進(jìn)制轉(zhuǎn)化為十進(jìn)制
假設(shè)我們現(xiàn)在有5項(xiàng)權(quán)限,在二進(jìn)制中用1代表?yè)碛袡?quán)限,0代表不擁有。所以11111這樣代表?yè)碛兴械奈屙?xiàng)權(quán)限,那么我們?nèi)绾沃烙脩羰欠裼心骋豁?xiàng)具體權(quán)限呢。
比如,我們現(xiàn)在想檢測(cè)用戶是否有第一項(xiàng)權(quán)限,我們首先用過(guò)異位 1 << 0,向左移0位,還是1,然后1 & (Math.pow(2,5) -1),
如果返回0,說(shuō)明個(gè)位對(duì)不上,也就是說(shuō)我們當(dāng)前沒(méi)有權(quán)限,如果返回1,說(shuō)明我們擁有第一項(xiàng)權(quán)限,同理,如果需要檢驗(yàn)第二位權(quán)限,只需要異位2就好了。
if((1 << 0) & (Math.pow(2,5) - 1) !== 0){ //擁有第一項(xiàng)權(quán)限權(quán)限 } if((1 << 1) & (Math.pow(2,5) - 1) !== 0){ //擁有第一項(xiàng)權(quán)限權(quán)限 }
總結(jié)
以上所述是小編給大家介紹的JS通過(guò)位運(yùn)算實(shí)現(xiàn)權(quán)限加解密,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
淺析Javascript匿名函數(shù)與自執(zhí)行函數(shù)
的相關(guān)資料2016-02-02Js-$.extend擴(kuò)展方法使方法參數(shù)更靈活
在JS里,我們的方法參數(shù)通常使用JQ的$.extend擴(kuò)展方法來(lái)實(shí)現(xiàn),感興趣的朋友可以了解下2013-01-01WebSocket的通信過(guò)程與實(shí)現(xiàn)方法詳解
這篇文章主要給大家愛(ài)介紹了關(guān)于WebSocket的通信過(guò)程與實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧2018-04-04深入理解JavaScript系列(28):設(shè)計(jì)模式之工廠模式詳解
這篇文章主要介紹了深入理解JavaScript系列(28):設(shè)計(jì)模式之工廠模式詳解,工廠模式定義一個(gè)用于創(chuàng)建對(duì)象的接口,這個(gè)接口由子類決定實(shí)例化哪一個(gè)類,需要的朋友可以參考下2015-03-03uni-app?微信小程序授權(quán)登錄的實(shí)現(xiàn)步驟
本文主要介紹了uni-app?微信小程序授權(quán)登錄的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01JavaScript實(shí)現(xiàn)的反序列化json字符串操作示例
這篇文章主要介紹了JavaScript實(shí)現(xiàn)的反序列化json字符串操作,結(jié)合實(shí)例形式分析了eval與JSON.parse兩種反序列化json字符串的相關(guān)操作技巧,需要的朋友可以參考下2018-07-07js實(shí)現(xiàn)鼠標(biāo)移到鏈接文字彈出一個(gè)提示層的方法
這篇文章主要介紹了js實(shí)現(xiàn)鼠標(biāo)移到鏈接文字彈出一個(gè)提示層的方法,涉及javascript鼠標(biāo)事件與css樣式的相關(guān)技巧,需要的朋友可以參考下2015-05-05原生js實(shí)現(xiàn)網(wǎng)頁(yè)頂部自動(dòng)下拉/收縮廣告效果
本文主要介紹了原生js實(shí)現(xiàn)網(wǎng)頁(yè)頂部自動(dòng)下拉/收縮廣告效果的實(shí)例代碼。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01