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()?
indexOf0-x如果找到元素,则返回索引,-1否则返回.
~将改变所有的位的数量,转向-1到0(的二进制represantation -1IS 1111 1111 ...).
0 是一个虚假的价值,所有其他数字都是真实的.
!!将转换falsy值false和truthy值true.这里every不需要它,因为它不关心它是否接受真实价值或真实.
正如其他人所提到的,现在你可以使用includes.但是,includesJavaScript生态系统比新的生态系统更新indexOf,所以这个解决方案可以在IE中运行,解决方案include不会.你仍然可以使用includes通过提供在IE或者填充工具或transpiling代码.
| 归档时间: |
|
| 查看次数: |
525 次 |
| 最近记录: |