思考:转义字符\的有趣现象

使用document.write时,如果发现没有输出来,请注意有没有“\”存在,如果存在将其换掉,如:\"换成',即可正常输出!

我们在后台拼写Html时因为"必须转义,故加上了\,而在javascript中\一般用于正则表达式的关键字符,

这样我们拼出来的字符串,javascript可能不会认为是html而是正则表达式,所以没有输出来?

2012-8-2 16:04


2012-8-2 22:00

我发现我上面的猜测是错误的,具体分析原来是这样的:(如果你感兴趣,可以跟着我的思路看下这个例子)

test.html页面:<script type="javascript" src="Handler.ashx"></script>//正确吧!

Handler.ashx:

string code="<div onclick=\"add('a','b');\" >中国</div>";//正确吧!记为@
HttpContext.Current.Response.Write("document.write(\"" + code + "\");");//也正确吧!

但是一调试你会发现‘中国’两个字就是出不来,不信你试试!

如果将@改为

string code="<div onclick='add('a','b');' >中国</div>";//正确吧!

‘中国’是显示了,但add('a','b')死活是不调用,为什么呢?因为onclick方法必须用双引号括起来,

你会说那用说双引号不就完了吗,问题又回到了@处,'中国'压根不显示了。

原因到底在何处?调试 Handler.ashx,发现它显示
document.write("
中国
");
查看源码发现:
document.write("<div onclick="add('a','b');">中国</div>");
错误终于露出马脚了,双引号已经把document.write事件划成两半了,这怎么能显示出'中国'呢?
 
那这种问题怎么处理呢?知道错误的原因就简单了,把@改为:
string code="<div onclick=\\\"add('a','b');\\\" >中国</div>";//这才是最正确的!!

总结:对于转义字符的使用应该多留心,虽然在当前页面上是正确的,但不能保证在多次套用后还是正确的,具体情况具体分析,这只是我做项目碰见的一个有趣的现象,我就把它记下来和大家分享下!

原文地址:https://www.cnblogs.com/liuguozhu2015/p/2620178.html