'!!〜'在Javascript中做什么?

msc*_*msc 3 javascript bitwise-operators

我在github上看到了以下一段代码.

/**
 * Filters an array of objects with multiple criteria.
 *
 * @param  {Array}  array: the array to filter
 * @param  {Object} filters: an object with the filter criteria as the property names
 * @return {Array}
 */
function multiFilter(array, filters) {
  const filterKeys = Object.keys(filters);
  // filters all elements passing the criteria
  return array.filter((item) => {
    // dynamically validate all filter criteria
    return filterKeys.every(key => !!~filters[key].indexOf(item[key]));
  });
}
Run Code Online (Sandbox Code Playgroud)

我不明白,!!~这里做了什么?

PS:我知道C和C++语言,但我是Javascript的新手.我知道那些运算符,但我不明白,为什么使用!!带有按位not(~)运算符的double negation()?

San*_*KSG 6

indexOf0-x如果找到元素,则返回索引,-1否则返回.

~将改变所有的位的数量,转向-10(的二进制represantation -1IS 1111 1111 ...).

0 是一个虚假的价值,所有其他数字都是真实的.

!!将转换falsy值false和truthy值true.这里every不需要它,因为它不关心它是否接受真实价值或真实.

正如其他人所提到的,现在你可以使用includes.但是,includesJavaScript生态系统比新的生态系统更新indexOf,所以这个解决方案可以在IE中运行,解决方案include不会.你仍然可以使用includes通过提供在IE或者填充工具或transpiling代码.