alert('z\z'==='zz');//true
Google了半天,只有一种解决方案,把z\z通过后台语言替换成z\\z 现在需求不允许这么做,要求直接在js里区分,编译器这样做是出于什么目的考虑?即便默认忽略也应该给出另一种可选择的途径吧!

解决方案 »

  1.   

    这种单引号,双引号,目前来说没啥很好的前台解决方案,一般的采用两种解决方案
    一,就是后台把这些符号编码一下,例如\编码成%5C或者你说变成\\
    二,页面上弄一个隐藏div, 把你的字符串输出到div中,例如<div id="div1">z\z</div>,
       然后获取div的innerHTML,不过这种方法不适合于用ajax请求回数据
      

  2.   

    对于第二种做法,给个 code 吧
      

  3.   

    这个是要求后台输出字符串的时候直接把字符串输出到页面,例如,后台字符串变量为str
    <div id="div1"><%=str%></div>
    js中判断document.getElementById("div1").innerHTML == "zz"
      

  4.   

    编译器这样做是出于什么目的考虑?
    -----
    当然自有道理,否则何必多此一举呢?主要是对其它一些常用但不方便直接表达的比如回车,TAB,版权符号,和<>等之类的符号提供一个转义表达,所以用\.....其实你已经知道这是转义符,这些应该懂.另外可选择的途径,初看是没有的.即使有其它方法,也会比较麻烦,涉及这样的问题,都是在后台里做,逆天而行可是....须小心啊,哈哈
      

  5.   


    看来暂时只能按第二种方案来解决这个问题。
    软解析的时候的确会把未识别转义补全,为什么硬编码的时候不直接这样做呢?
    总结一下:<textarea id="txt" style="display:none">z\z</textarea>
    <script>
    var s1='z\z',s2=document.getElementById('txt').value;alert(s1=='zz');   //true
    alert(s1=='z\z');  //true
    alert(s1=='z\\z'); //falsealert(s2=='zz');   //false
    alert(s2=='z\z');  //false
    alert(s2=='z\\z'); //true
    </script>