日期:2014-05-16  浏览次数:20414 次

js 未结束的字符串常量
js在项目经常会遇到未结束的字符串常量的困扰,经php666整理后,加上自己的开发经验为大家列举了以下几种常见的案例以及解决的方案 :

一就是js文件页面编码不一致,导致文件内部特殊字符因格式不一致就会在解码时出现乱码,从而导致编译器在未到达引号( "或' )前提前结束,产生“未结束的字符串常量”。

解决办法:如果是外部引入js文件 ,可以在<script type text/javascript” src=”XXX.js” charset=”###″>?
设置charset="###"与你的网页编码一致就可以了;

? ?二??在JAVASCRIPT中,字符串前后标记(如单引号或双引号)不匹配或者嵌套错误

? ?? ?解决办法: 让前后引号正确配对;共有两层嵌套时,双引号内嵌套单引号是正确的,单引号内嵌套双引号也是正确的。共有三层嵌套时,最里面一层引号不能和最外面一层相同,这样是错误的,可以在最里面一层引号前加上转义字符“\”。

三 JAVASCRIPT的字符串不能跨行,源码如下 :

??document.write('<table width=770 border=0 cellpadding=0 cellspacing=0>?
??<tr>?
? ? <td><img src=../images/f_01.gif border=0 /></td>?
? ? <td><img src=../images/f_02.gif border=0 /></td>?
? ?</tr>?
??</table>')??
? ?Line:2??
? ?Char:71??
? ?Code:0??
? ?Error:未结束的字符串常量??
解决方法:

? ?? ?? ?? ?? ? 一种方法用\N分隔每一行??源码修改为:

? ?? ?? ? document.write('<table width=770 border=0 cellpadding=0\n cellspacing=0>\n<tr>\n<td><img src=../images/f_01.gif border=0 /></td>\n<td><img src=../images/f_02.gif border=0 /></td>\n</tr>\n</table>');

另一种方法使用多个document.write输出语句,比如源码修改如下:



1.document.writeln('<table width=770 border=0 cellpadding=0 ');document.writeln('cellspacing=0> ');??2.document.writeln('<tr> ');??3.document.writeln('<td><img src=../images/f_01.gif border=0 /></td> ');??4.document.writeln('<td><img src=../images/f_02.gif border=0 /></td> </tr> ');??5.document.writeln('</table>'); 四传递的参数变量内或者脚本变量中包含HTML标记语言、包含换行符或包含引号:

? ?? ?? ???这种情况是最难发现的,容易忽略了变量内部文字原因产生的,将字符串以参数形式传递给一个函数或者href、action时,该字符串里包含换行符、引号或HTML标记,造成了此错误。如:a.测试时使用单行数据是正常的,未出现这个错误;使用多行数据并使用回车键换行,就出现了此错误,因为里面包含换行符。源码 b.mArray[<%=n_id%>]="<%=loopnum%><><%=n_topic%><><%=state%><><%=n_sendtime%><><%=n_content%>";看似无误,但是<%=n_topic%>、<%=n_content%>中包含了多个单双引号,就出现了此错误。

??解决办法:

对于这种情况,我的解决方法有两个,一个是将字符串变量进行替换操作,将双引号替换成单引号,单引号替换成“\"”,不过这样在传递后读取时还得替换成原文;第二种方法是不直接将数据以参数形式传递,而是先将其赋值给一个隐藏文本内,函数里只需读取文本中的内容即可。
1 楼 shaka 前天  
我也遇到类似问题,传参数带引号。
但在我实际测试中,只有单引号会报错,单引号做了转义"\'"就不报错了