关于javascript:如何!!?(不是不是波浪形/爆炸声波)改变’包含/包含’数组方法调用的结果?

How does !!~ (not not tilde/bang bang tilde) alter the result of a 'contains/included' Array method call?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What does tilde (~) preceding jQuery object do?

我在阅读时在代码中发现了一个奇怪的!!~:https://github.com/learnboost/mongoose/blob/master/lib/document.js l678

1
2
3
Document.prototype.isModified = function (path) {
  return !!~this.modifiedPaths.indexOf(path);
};

我已经读过了那是什么!!(不是)javascript中的运算符?如何:接线员?为什么作者在这里使用!!~

我试过:

1
2
3
4
!!~1  // -> true
!!~0  // -> true
!!~-1 // -> false
!!~-2 // -> true

似乎只有当数字是-1时才是false。对吗?为什么不检查一下数字不是-1>=0