JavaScript中的“!~”是什么意思

what's the " !~" mean in javascript

本文关键字:是什么 意思 中的 JavaScript      更新时间:2023-09-26
(function () {
    var names = [];
    return function (name) {
        addName(name);
    }
    function addName(name) {
        if (!~names.indexOf(name))//
            names.push(name);
    console.log(names);// ["linkFly"]
    }
}())('linkFly');

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

tl;dr

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

更长版本:

波浪号 ( ~ ( 运算符 (按位 NOT( 产生 a 的倒置值(又名 one's 补码(。 例如,~-1 === 0 .请注意,0 == false!0 === true 。 当在数组中找不到元素时,indexOf返回 -1。因此,我们可以使用 !~-1 === true 来确定indexOf是否无法在names中找到name(即返回 -1(。

我的意见:

如您所见,使用这些没有注释的混淆或"聪明"技术确实会让读者感到困惑。如果您确实喜欢这些技术,请为了读者而记录您的代码行正在做什么!

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

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