Tilde在JavaScript中的作用是什么?

102 阅读2分钟

你不是每天都能看到JavaScript中的tilde。

我在创建Twitter Bot时,浏览了一下Twit NPM库的源代码,发现了以下几行代码。

if(~followers.indexOf(target)) {
  // do some action
}

注意到第一行中的tilde了吗?让我们来看看这到底是怎么一回事。

发现,当我们使用~运算符时,它的作用是-(A+1),其中A是变音符右边的数值。例如,如果我们这样做,我们会得到-2(因为-(1+1)=-2)。

~['apples', 'oranges'].indexOf('apples'); // => 0
~['apples', 'oranges'].indexOf('oranges'); // => -2

也许你和我一样,你还没有真正看到使用tilde的用处。

事实证明,它对于确定一个数值的真实性非常有用。它可以翻转操作数中的所有位

现在,让我们意识到我们正在使用的是一种疯狂的语言,并回顾一下JavaScript是这样做的。

-2 ? true : false; // => true
0 ? true : false; // => false
-1 ? true : false; // => true 😲

啊!这不是很有趣吗?-1的真度为,而唯一一个真度为的整数是0。 所以,我们真的可以用tilde作为一个速记符号。 看看这个。

// Instead of doing this
if(!fruits.indexOf('apples') != -1) {
  // Mmm, I love apples.
}

 else {
  // We ain't got no apples
}

// We can do this 
// to see if an array contains a particular value 
// (btw, there's a better way to do this with ES6 now.

if (!!~fruits.indexOf('apples')) {
  // Yay apples
  console.log("Found apples!") // <= this will print
}
 else {
  // Still no apples
  console.log("No apples apparently")
}

现在,问题变成了......我是否会使用这个?也许不会,但在偶然发现它之后,知道它的存在是件很酷的事。我不认为我会经常使用它,因为我更希望别人在阅读我的代码时能尽快地理解它。

我希望你在这里学到了一些东西,并且在下次看到漂浮在周围的~时不会被疏远。