(function () {
var names = [];
return function (name) {
addName(name);
}
function addName(name) {
if (!~names.indexOf(name))//
names.push(name);
console.log(names);// ["linkFly"]
}
}())('linkFly');
有时我看到这个逻辑,它是什么意思? 谢谢〜
答案 0 :(得分:14)
<强> TL;博士强>
当在数组中找不到元素时, indexOf
返回-1。因此,if
语句正在检查name
中是否找不到names
。 !~-1 ==> true
更长的版本:
波形符(~
)运算符(按位NOT)产生a的反转值(a.k.a。的补码)。 [Source]例如,~-1 === 0
。请注意0 == false
和!0 === true
。当在数组中找不到元素时,indexOf
返回-1。因此,我们可以使用!~-1 === true
查看indexOf
中name
是否找不到names
(即返回-1)。
我的观点:
正如您所看到的,使用这些混淆或者#34;聪明的&#34;没有评论的技术真的会让读者感到困惑。如果你喜欢这些技巧,请记录你的代码行为了读者的利益!
答案 1 :(得分:0)
! (逻辑NOT) 如果单个操作数可以转换为true,则返回false;否则,返回true。
对于除-1之外的所有整数操作数,应用〜运算符后的净操作数!运算符本质上是真实的,导致FALSE。 -1是特殊的,因为〜(-1)给出0,这在JavaScript中是假的。添加! operator给我们唯一的TRUE。