簡體   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