2015-02-10 55 views
2
(function() { 
    var names = []; 
    return function (name) { 
     addName(name); 
    } 
    function addName(name) { 
     if (!~names.indexOf(name))// 
      names.push(name); 
    console.log(names);// ["linkFly"] 
    } 
}())('linkFly'); 

有時候我看過這個邏輯,這是什麼意思? 感謝〜javascript中的「!〜」是什麼意思

+0

你可以從中得到你喜歡的含義。我喜歡認爲這意味着代碼的作者並不認爲其他人將永遠不需要閱讀他們的代碼。 – bhspencer 2015-02-10 03:40:42

+0

我已經知道它是如何工作的,這是一種不好的做法 謝謝所有人~~~ – simotophs23 2015-02-10 04:18:21

回答

7

TL;博士

indexOf返回-1當元件不能在陣列中找到。因此,if聲明正在檢查是否在names中找不到name!~-1 ==> true

加長版:

波浪號(~)運算符(按位NOT)產生的反轉值(又名的補數)。 [Source]例如,~-1 === 0。請注意,0 == false!0 === trueindexOf在數組中找不到元素時返回-1。因此,我們可以使用!~-1 === true來找出indexOf是否在names(即返回-1)中找不到name

我的看法:

正如你所看到的,利用這些模糊或「聰明」的技術沒有註釋才能真正混淆讀者。如果您喜歡這些技術,請爲您的讀者記錄您的代碼行正在做些什麼!

+0

!〜(-1)return ture? – simotophs23 2015-02-10 03:25:49

+0

你會認爲這是不好的做法嗎?這不完全是自我記錄代碼。 – bhspencer 2015-02-10 03:26:15

+1

這是一個簡單的解釋,代字符翻轉位,並且'!'將其反轉爲布爾值,即使它與'names.indexOf(name)!= -1'基本相同,這個答案几乎不能解釋有意義的方式? – adeneo 2015-02-10 03:27:01

0

! (邏輯NOT) 如果其單個操作數可以轉換爲true,則返回false;否則,返回true。

對於除-1以外的所有整數操作數,應用〜運算符後的淨操作數爲!操作符會在真實中導致FALSE。 -1是特殊的,因爲〜(-1)給出0,這在JavaScript中是虛假的。添加!運營商給我們唯一的TRUE。

相關問題