[英]Why this JavaScript code doesn't work?
我有for循环,它通过带有参数的数组。 当下一个参数是“?”,“&”或“ ||”时,它不应该添加逗号,但是总会添加。 我不明白为什么,这是代码:
var args = ["arg1","arg2","?","arg3"]; var query = ""; for (var i = 0; i < args.length; i++) { switch (args[i]) { case "?": query += " where "; break; case "&": query += " and "; break; case "||": query += " or "; break; default: if (args[i+1] != "?"); { query += args[i] + ", "; break; } query += args[i] + " "; break; } } document.write(query);
当我键入此内容时(这被“”分割并发送到数组args):
arg1 arg2 ? arg3
它像这样打印:
arg1, arg2, where arg3, // while it should be arg1, arg2 where arg3,
感谢您的帮助,问题是由外部脚本引起的。 是的, 我删除了分号;)
您的if
语句已损坏:
if (args[i+1] != "?"); // <---- remove that semicolon
{
query += args[i] + ", ";
break;
}
您有一个流浪的分号。 这不是语法错误,但这意味着if
不执行任何操作。 添加逗号的代码始终运行,并在不添加逗号的代码之前退出switch
。
如果if和您的代码块之间有分号:
if (args[i+1] != "?");
应该
if (args[i+1] != "?")
可能存在完全不同的方法来解决此问题,这将使您的代码更易于扩展,而无需加深if
或switch
树
一个简单的例子
// define some dictionaries
let logicDict = Object.assign(Object.create(null), {
'?': 'where',
'&': 'and',
'||': 'or'
});
// define some flags
let noComma = false;
// reduce your array
['arg1', 'arg2', '?', 'arg3'].reduceRight((str, e) => {
if (e in logicDict) {
noComma = true;
return logicDict[e] + ' ' + str;
}
if (!noComma) e += ',';
noComma = false;
return e + ' ' + str;
}, '').slice(0, -1);
// "arg1, arg2 where arg3,"
感谢您注意到分号,问题是由外部脚本引起的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.