Javascript 为什么我的代码没有检测到匹配?

Javascript 为什么我的代码没有检测到匹配?,javascript,Javascript,我有一些代码将字符串与数组中的值进行比较: var blacklistedSites=['https://www.google.com/_/chrome/newtab?espv=2&ie=UTF-8']; //如果当前站点被列入黑名单,则返回true,否则返回false 函数isBlacklistedSite(url){ console.log('站点是'+url'); blacklistedSites.forEach(函数(条目){ console.log('测试'+条目); if(entry

我有一些代码将字符串与数组中的值进行比较:
var blacklistedSites=['https://www.google.com/_/chrome/newtab?espv=2&ie=UTF-8'];
//如果当前站点被列入黑名单,则返回true,否则返回false
函数isBlacklistedSite(url){
console.log('站点是'+url');
blacklistedSites.forEach(函数(条目){
console.log('测试'+条目);
if(entry==document.URL){
返回true;
}
});
返回false;
}

console.log(isBlacklistedSite('https://www.google.com/_/chrome/newtab?espv=2&ie=UTF-8'));代码不起作用的原因是:

返回true;
实际上什么都不做。它只是从
forEach
函数返回,不管是否存在匹配项,都会发生这种情况。您的
返回true不会从
isBlacklistedSite()函数返回。您的
isBlacklistedSite()
函数始终以以下方式退出:

返回false;
虽然您可以使用
.forEach()
来实现这一点,但这是一个糟糕的选择。
.forEach()
方法始终迭代数组的每个成员,而不考虑您在
forEach
函数中提供的任何返回值。只有同时对数组的每个元素执行其他操作时,才能使用它。即便如此,最好还是将这两项不同的任务分开。如果确实使用了它,则必须将检测保留在
.forEach(function(){…
外部定义的变量中

用于测试与数组元素的精确匹配 如果要测试数组元素的精确匹配,可以使用并测试值>-1

例如:

var blacklistedSites=['https://www.google.com/_/chrome/newtab?espv=2&ie=UTF-8'];
函数isBlacklistedSite(url){
console.log('站点是'+url');
返回blacklistedSites.indexOf(url)>-1;
}
//使用已知的匹配值进行测试。
log(isBlacklistedSite(blacklistedSites[0]);
//使用已知的失败值进行测试。

log(isBlacklistedSite('foo'))
A
content\u scripts
entry没有定义您的背景页面。它定义了。当遇到黑名单站点时,不清楚您的扩展插件会做什么。但是,使用内容脚本检测URL可能不是一个好的解决方案。您应该考虑使用侦听器。我对您的问题进行了更多的编辑比我平时更重要。问题中有相当多的无关信息,这与你的实际问题并不相关。显然,我觉得编辑是一个更好的问题。但是,这是你的问题,所以如果你愿意,请随意将编辑回滚到以前的版本。