繁体   English   中英

为什么此JavaScript代码不起作用?

[英]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] != "?")

可能存在完全不同的方法来解决此问题,这将使您的代码更易于扩展,而无需加深ifswitch

一个简单的例子

// 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM