你不是每天都能看到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")
}
现在,问题变成了......我是否会使用这个?也许不会,但在偶然发现它之后,知道它的存在是件很酷的事。我不认为我会经常使用它,因为我更希望别人在阅读我的代码时能尽快地理解它。
我希望你在这里学到了一些东西,并且在下次看到漂浮在周围的~时不会被疏远。