关于js中单引号(')和双引号(")的使用以及转义的理解
这几天一直在画页面,身为开发人员的我之所以要画页面是因为当前项目中的页面上所有的东西都是从数据库中取得的,也就是动态的,类似于我们设计自己的个人QQ空间,但因为是大型平台,有自定义业务的概念 ,所有更为复杂,在这就不多说了,我所谓的画页面就是如何把数据结合逻辑,变成HTML,其中遇到的最大的问题就是我今天要说的;
一个页面上有一个查询,当然查询的条件,字段类型都是动态的,要根据数据类型生成不同的文本框,如果是varchar2就生成不同的, 如果是date就生成加入时间选择js的,页面上有一个添加新的条件组的按钮,链接到一个js事件,里面就要做关于文本框的判断,我们只看判断部分 如下;
if(tlist[index].value=="date")
{
table.rows[t].cells[2].innerHTML=' onclick="WdatePicker({dateFmt:"yyyy-MM-dd"})" onfocus="WdatePicker({dateFmt:"yyyy-MM-dd"})" class="Wdate" />';
}
else
{
table.rows[t].cells[2].innerHTML='';
}
重点为红色部分, 这样写我本来认为是无可厚非的, 但是如果这段代码执行一次,就汇报js错误,错误信息是“语法错误”,js本身为弱语言,单引号和双引号如果是但用的话其实可以混淆的,但如果一起用就要区分,例如上段代码我可以把单引号和双引号对换,也是可以的, 但如果只改变其中一处就需要用+号链接, 意义也不同了,例如
"'b'" 可以 ,但""b""就会出错,需要""+"b"+""
无法通过单引号双引号的改变来解决问题,我就开始寻求别的思路,我尝试了使用 \ (转义符)来解决,如下
onclick="WdatePicker({dateFmt:\"yyyy-MM-dd\"})"
但还是不行,个人认为原因是js还是在html的作用中,而不是java,所以我想到了使用"来解决,
table.rows[t].cells[2].innerHTML=' onclick="WdatePicker({dateFmt:"yyyy-MM-dd"})" onfocus="WdatePicker({dateFmt:"yyyy-MM-dd"})" class="Wdate" />';
问题解决了, 我生平第一次感觉到了这个东西的神奇, 原来只使用过 ,看来在程序的世界中,每一样东西都有他存在的意义, 即使在我们不得已淘汰他们的时候 ,也要知道他们有意义的部分,因为这些富有意义的东西可能在某时某刻给我们极大地帮助,而且替代他们的产品未必可以将他们的优点全部传承,人亦如此 。