使用双重否定-为什么?

Using double negation - For what reason?

本文关键字:为什么      更新时间:2023-09-26

昨天我读了John Resig的一篇博文:http://ejohn.org/blog/comparing-document-position/

这个片段我看不懂:

function contains(a, b){
  return a.contains ?
    a != b && a.contains(b) :
    !!(a.compareDocumentPosition(b) & 16);
}

第一个表达式很清楚:如果a与b不相同,并且b包含在a中,则返回true。但是第二个表达中两次否定的目的是什么呢?compareDocumentPosition()的返回值按位与16比较。=>结果为16或0。假设它是16,那么在第一个否定之后它就变成假了。然后在第二个否定之后再次为真。在0的情况下,它变为真,然后又变为假。

有人能理解代码并解释它吗?

双反运算符用于转换为布尔值。可以把它看作与parseInt()

类似的方法。

这是一个相关的stackoverflow问题