什么是"!〜"在javascript中的含义

sim*_*s23 6 javascript

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

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

usa*_*nds 15

TL;博士

indexOf当在数组中找不到元素时返回-1.因此,该if声明正在检查是否name找不到names.!~-1 ==> true

更长的版本:

tilde(~)运算符(按位NOT)产生a的反转值(也就是一个补码).[ 来源 ]例如,~-1 === 0.请注意0 == false!0 === true.indexOf当在数组中找不到元素时返回-1.因此,我们可以使用!~-1 === true找出如果indexOf找不到namenames(即返回-1).

我的看法:

正如您所看到的,使用这些混淆或"聪明"技术而不发表评论可能会让读者感到困惑.如果您确实喜欢这些技巧,请记录您的代码行为读者所做的事情!

  • 旁注:这段代码是不必要的"聪明".保存一些字符不值得它造成的混乱.我说这是不好的做法. (4认同)
  • 这是一个简单的解释,代字号翻转位,并且`!`将其反转为布尔值,即使它与`names.indexOf(name)!= -1`基本相同,这个答案几乎不能解释任何行为.意义何在? (3认同)