2011-09-30 74 views
-6

我需要知道我的JavaScript語句是否正確?我很困惑單引號和加號。我的JavaScript語句是否正確?

document.f.SQL.value ='\('+ 
    document.f.SQL.value + a[i] + 
    ' >= \''+ document.f[a[i]+"_A"].value + 
    '\' AND '+ a[i] +' <= \''+ 
    document.f[a[i]+"_B"].value + 
    '\) or DATEADD'+'\('+ 
    'dd, 0, DATEDIFF'+'\('+ 
    'dd, 0,'+ a[i] +'\)) = \''+ 
    document.f[a[i]].value + 
    '\''; 
+4

沒有語法錯誤,但沒有辦法知道代碼是否工作。你沒有告訴我們你在做什麼。 – 0x499602D2

+0

如果你試圖描述你想要你的代碼做什麼,它會有所幫助。 –

+0

這是我嘗試在javascript中獲取字符串的查詢,並且粘貼的代碼屬於where子句SELECT CH_INSERT_DATE FROM CMS_HITLIST WHERE(CH_INSERT_DATE> ='2011-09-22'AND CH_INSERT_DATE <='2011-09-22')或DATEADD(dd,0,DATEDIFF(dd,0,CH_INSERT_DATE))='2011-09-22' –

回答

4

我粘貼你的代碼中Closure Compiler和所使用的這給了沒有任何錯誤,所以語法是正確的。生成的代碼是:

document.f.SQL.value = "(" + document.f.SQL.value + a[i] + " >= '" + document.f[a[i] + "_A"].value + "' AND " + a[i] + " <= '" + document.f[a[i] + "_B"].value + ") or DATEADD" + "(" + "dd, 0, DATEDIFF" + "(" + "dd, 0," + a[i] + ")) = '" + document.f[a[i]].value + "'";

我用這個選項:

  • 優化:空白僅
  • 格式:漂亮的打印

儘量避免這種複雜的線條。利用變量。用下面的方法可以得到相同的結果:

var old = document.f.SQL.value + a[i]; 
var sql_a = document.f[ a[i] + "_A" ].value; 
var sql_b = document.f[ a[i] + "_B" ].value; 
var whatever = document.f[ a[i]  ].value; 
// (old) >= 'sql_a' AND 
var sql = "(" + old + ") >= '" + sql_a + "' AND "; 
// A <= 'sql_b') 
sql += a[i] + " <= '" + sql_b + "') " 
// or DATEADD(dd, 0, DATEDIFF(dd, 0, A)) = 'whatever' 
sql += "or DATEADD(dd, 0, DATEDIFF(dd, 0, " + a[i] + ")) = '" + whatever + "'; 
document.f.SQL.value = sql; 

問題是,試着將字符串分成較小的部分。我沒有在上面的小部分分割查詢,這取決於你。

1

如果您的字符串中需要單引號而且沒有雙引號(內部),則使用雙引號分隔字符串,並且不需要轉義單引號。

我通常更喜歡使用單引號來分隔JavaScript中的字符串,特別是當我傾向於使用HTML字符串時,因爲我更喜歡使用雙引號來表示屬性。儘管您可以使用單引號或雙引號,但沒有像PHP或其他語言那樣的功能差異。

你的表情很難看懂。考慮簡化它,將其放入幾條指令或查找/編寫某種可重用的令牌替換例程。

轉義括號\(看起來沒有必要,並且連接兩個字符串文字' + '

document.f[a[i]+"_A"].value這樣的表達式,如果在使用它們之前將它們分配給有意義的變量,它們將更易於閱讀。