Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取未定义的值而不是返回的字符串?_Javascript - Fatal编程技术网

Javascript 获取未定义的值而不是返回的字符串?

Javascript 获取未定义的值而不是返回的字符串?,javascript,Javascript,这是测试代码。我不确定为什么我没有在console.log(hasToken:+hasToken)行上返回字符串?我应该在三次尝试失败后将其返回。不带标记的字符串(var XX)工作正常,但带标记的字符串(var X)永远不会正确返回字符串。如果我单步执行代码,我会看到字符串被传回,但发生了其他事情,我不知道为什么?console.log显示hasToken值未定义?我知道哪里支持返回字符串 var x=“//tokene.secure.adnxs.com/px?randomnumber=[t

这是测试代码。我不确定为什么我没有在console.log(hasToken:+hasToken)行上返回字符串?我应该在三次尝试失败后将其返回。不带标记的字符串(var XX)工作正常,但带标记的字符串(var X)永远不会正确返回字符串。如果我单步执行代码,我会看到字符串被传回,但发生了其他事情,我不知道为什么?console.log显示hasToken值未定义?我知道哪里支持返回字符串

var x=“//tokene.secure.adnxs.com/px?randomnumber=[timeSTAMP]&url=[url]&newvsreturning=[newvsreturning]”;
var xx='//xwww.googleadservices.com/pagead/conversion/822232847/?label=\u 7yrCLe91H4Qj46JiAM&;guid=打开&;脚本=0';
var regex=new RegExp(“/\\[URL\\]\\[NEWVSRETURNING\\]\\[RANDOMNUMBER\]\\\[TIMESTAMP\]\\\[CACHEBUSTER\\]/”,“i”);
功能验证删除(str){
cnt=0;
函数testTokenRemoved(str){
if((正则表达式测试(str))和&(cnt<2)){
//如果这里还有代币
cnt++;
//str=去角化标签(imgSrc);
console.log(cnt+“失败:”+str);
删除测试标记(str);
}否则{
console.log(cnt+“已传递:”+str);
返回str;
}
};
返回testTokenRemoved(str);
};
var hasToken=validateTokenRemoving(x);
var noToken=验证删除(xx);
log(“hasToken:+hasToken”);

log(“noToken:+noToken”)
您必须在if块中的
testTokenRemoved(str)
之前放置
return
语句,以返回递归调用的返回值:

var x=“//tokene.secure.adnxs.com/px?randomnumber=[timeSTAMP]&url=[url]&newvsreturning=[newvsreturning]”;
var xx='//xwww.googleadservices.com/pagead/conversion/822232847/?label=\u 7yrCLe91H4Qj46JiAM&;guid=打开&;脚本=0';
var regex=new RegExp(“/\\[URL\\]\\[NEWVSRETURNING\\]\\[RANDOMNUMBER\]\\\[TIMESTAMP\]\\\[CACHEBUSTER\\]/”,“i”);
功能验证删除(str){
cnt=0;
函数testTokenRemoved(str){
if((正则表达式测试(str))和&(cnt<2)){
//如果这里还有代币
cnt++;
//str=去角化标签(imgSrc);
console.log(cnt+“失败:”+str);
返回testTokenRemoved(str);
}否则{
console.log(cnt+“已传递:”+str);
返回str;
}
};
返回testTokenRemoved(str);
};
var hasToken=validateTokenRemoving(x);
var noToken=验证删除(xx);
log(“hasToken:+hasToken”);

log(“noToken:+noToken”)
在真实情况下不会返回任何内容。
返回testTokenRemoved(…)
这是出于设计。只有当它失败3次或通过时才会返回。感谢您的回复。我还是很困惑。第一次通过的不带令牌(var xx)的字符串按预期返回。为什么在testTokenRemoved函数中通过检查运行的带有标记的字符串在到达最终尝试并返回后就不起作用了?为了清楚起见,我更改了子程序参数的名称。我重新测试后仍然看到字符串被传回,但由于某种原因,函数没有将值返回到变量image is here==>@MichaelJohns Sure,因为您检查
str
变量,而不是
testTokenRemoved
的返回值。用鼠标选择完整的
testTokenRemoved(str)
表达式并将鼠标悬停在其上。您将看到,返回的值与稍后记录的值完全相同。因此,问题在于我执行递归的方式,但我不明白为什么我看到从函数返回的值?@MichaelJohns。