什么是“!〜”在javascript中的含义

时间:2015-02-10 03:20:49

标签: javascript

(function () {
    var names = [];
    return function (name) {
        addName(name);
    }
    function addName(name) {
        if (!~names.indexOf(name))//
            names.push(name);
    console.log(names);// ["linkFly"]
    }
}())('linkFly');

有时我看到这个逻辑,它是什么意思? 谢谢〜

2 个答案:

答案 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查看indexOfname是否找不到names(即返回-1)。

我的观点:

正如您所看到的,使用这些混淆或者#34;聪明的&#34;没有评论的技术真的会让读者感到困惑。如果你喜欢这些技巧,请记录你的代码行为了读者的利益!

答案 1 :(得分:0)

! (逻辑NOT) 如果单个操作数可以转换为true,则返回false;否则,返回true。

对于除-1之外的所有整数操作数,应用〜运算符后的净操作数!运算符本质上是真实的,导致FALSE。 -1是特殊的,因为〜(-1)给出0,这在JavaScript中是假的。添加! operator给我们唯一的TRUE。