我在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()?
〜Infinity我的问题是它如何计算为-1。
〜无限= -1
console.log(~Infinity);Run Code Online (Sandbox Code Playgroud)
因为
无限+无限=无限
console.log(Infinity+Infinity)Run Code Online (Sandbox Code Playgroud)
要么
无限-无限= NaN
console.log(Infinity-Infinity)Run Code Online (Sandbox Code Playgroud)
~Infinity输出是如何到达的-1;
我正在查看其他人的代码,并试图弄清楚他们在做什么。有问题的代码段如下所示:
for(j in a)
for(i in a)
y=a[i]+-~j,b=a[j]
Run Code Online (Sandbox Code Playgroud)
我明白这y=a[i]部分,但有什么作用+-~j?
我刚刚开始学习Javascript,我对下面的特定代码有一个特定的问题.它是Eloquent Javascript第4章中lycanthrope登录的一部分.由于我的问题的特殊性,我没有包括与此问题相关的所有其他代码,因为我认为没有必要回答我的问题.
如果这被认为是"不良做法",请告诉我,我将确保修改此和/或未来的帖子以显示更多背景信息.
在下面的代码中,第二行显示返回.到目前为止,我已经了解到indexOf返回一个正数或零,当且仅当它发现其中传递的任何内容时才会发生.如果没有发现,则返回-1.
在这种情况下,它后跟!= -1,我理解为"不等于-1".这对我来说很清楚.
我不完全理解的是第2行的实际回报最终是什么.它返回true或false的布尔值吗?或者它是否返回了找到"事件"的实际索引?
接下来,在第一个if语句中,我们再次看到hasEvent变量.我将此语句读作"如果hasEvent(event,entry)为true,则将1添加到索引中.
我是否正在阅读'这是正确的,第二行的回报确实是一个布尔值?
function hasEvent (event, entry) {
return entry.events.indexOf(event) != -1;
}
function tableFor (event, journal) {
var table = [0, 0, 0, 0];
for (var i=0; i < journal.length; i++) {
var entry = journal[i] , index = 0;
if (hasEvent(event, entry)) index += 1;
if (entry.squirrel) index += 2;
table [index] += 1;
}
return table;
}
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助,请告诉我是否应该以不同的方式陈述此问题!我想在继续之前确保我理解事情!
我在测试中看到了这个问题,但我不明白运算符如何处理该语句.
let a = ~-(2 + "2");
console.log(a);Run Code Online (Sandbox Code Playgroud)
我正在读这个javascript函数:
if (~['bacon', 'burger'].indexOf(type)) {
this.res.writeHead(200, { 'Content-Type': 'text/plain' });
this.res.end('Serving ' + type + ' sandwich!\n');
}
Run Code Online (Sandbox Code Playgroud)
但是我不~ 知道当我使用它或者含义时,有人知道什么意思?