[英]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.