Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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,我有一个for循环,它通过带有参数的数组。当下一个参数是?、&或| |时,它不应该添加逗号,但它总是添加逗号。我不明白为什么,下面是代码: 变量args=[arg1,arg2,arg3]; var查询=; 对于var i=0;i

我有一个for循环,它通过带有参数的数组。当下一个参数是?、&或| |时,它不应该添加逗号,但它总是添加逗号。我不明白为什么,下面是代码:

变量args=[arg1,arg2,arg3]; var查询=; 对于var i=0;i
        if (args[i+1] != "?"); // <---- remove that semicolon
        {
            query += args[i] + ", ";
            break;
        }

你有一个游离的分号。这不是语法错误,但它意味着if不做任何事情。添加逗号的代码始终会运行,并在不添加逗号的代码之前退出开关。

在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,"

感谢大家注意到分号,问题是由外部脚本引起的。

它与arg1、arg2、where arg3、arg1、arg2 where arg3、arg2 where arg3、NinaScholz arg2后面的逗号where之前显然不需要。打印到哪里?您可能正在打印一个数组,当我打印查询变量时,它的toString方法会添加逗号。@Teemu。查询变量是字符串,在此循环之前定义。如果args[i+1]!=?;哎呀@凯西克,我有,我也运行了代码。没有分号也行。谢谢你的帮助,但我解决了这个问题。这个问题是由extern脚本中的另一个数组引起的,现在一切正常。无论如何,谢谢你的回答。@Nikola相信我,你想去掉那个分号。@Nikola问题是ppl在不知道整个故事的情况下投票给错误的答案,在这里和那里发表评论。这可能会误导其他人找到正确答案,而正确答案就在评论中。@SyedeKramudinemon,但在这种情况下,答案不是错误的。这个分号极大地改变了代码的含义。这非常有趣。谢谢您的脚本仅被修改为声明查询并将args作为Node.js程序连接到process.argv,但它不能与分号一起工作,但一旦删除分号,它就可以正常工作。确实如此。把分号留在里面,它还是会错的。哈哈,我说了谢谢你们注意到分号的家伙,你们还在抱怨…分号王?!是的,那是个错误,我知道!不管它听起来多么愚蠢,但实际上它甚至在使用分号时也能起作用,我真的不知道怎么做,但我删除了它。我不会再重复了,伙计们。拜托,这没什么新鲜的。再次感谢您的关注!