2015-02-10 103 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。