2014-12-31 121 views
0

在對於平均框架的啓動代碼有以下什麼是「!!〜this.roles.indexOf(‘*’)」意味着MEAN.io框架

if (!!~this.roles.indexOf('*')) { 

它位於所示的代碼行在shouldRender函數的public/modules/core/services/menus.client.service.js文件中。

var shouldRender = function(user) { 
     if (user) { 
      if (!!~this.roles.indexOf('*')) { //Here is the code 
       return true; 
      } else { 
       for (var userRoleIndex in user.roles) { 
        for (var roleIndex in this.roles) { 
         if (this.roles[roleIndex] === user.roles[userRoleIndex]) { 
          return true; 
         } 
        } 
       } 
      } 
     } else { 
      return this.isPublic; 
     } 

     return false; 
}; 
+0

他們應該使用'this.roles.indexOf( '*')> - 1',具有相同字符數量更清晰。或'〜this.roles.indexOf('*')',這個更短。 – Oriol

+0

是的,根本沒有必要將值轉換爲布爾值,因爲任何值都是真實可評估的 –

+0

哦,哎呀,對不起 – abcf

回答

0

它通過將其轉換爲布爾值來評估是否找到'*'。這是簡單的Javascript。

~[1, 2, 3, 4].indexOf(4) 
//returns -4 (bit inversion of 3) 

indexOf當元素存在時返回0,1,2,3 ...。位反轉分別將這些值轉換爲-1,-2,-3,-4,...。

當元素不存在時,返回-1。通過位反轉,0仍然存在。

所以,當元素存在時,你會得到一個非零值。當元素不存在時,您得到0.

通過預先考慮!!,您將值轉換爲布爾值(0是falsey值,!0是true,!! 0是false; x(如果不是零)是非法值,!x是假的,!! x是真的)。

因此,可以理解爲:如果 '*' 是this.roles ...