我需要知道我的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 +
'\'';
答案 0 :(得分: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 :(得分:1)
如果你的字符串中需要单引号而且没有双引号(在其中),那么使用双引号来分隔你的字符串,你不需要转义单引号。
我通常更喜欢使用单引号来分隔JavaScript中的字符串,尤其是当我倾向于处理HTML字符串时,因为我更喜欢使用双引号来表示属性。您可以使用单引号或双引号,但没有像PHP或其他语言那样的功能差异。
你的表达很难阅读。考虑简化它,将其放入几个指令或查找/编写某种可重用的令牌替换例程。
括号\(
的转义看起来没必要,并且连接两个字符串文字' + '
。
document.f[a[i]+"_A"].value
之类的表达式如果在使用之前被分配到有意义的命名变量,将更容易阅读。