【转】小心转义符号 --- JS字符串字面量与字符串的值

        定义一个字符串:


   var a = 'AAmwAAo3LAwtAAjSGABnAgI\/CAw+AgrFBASy';


        接着我们在input框输入同样的字符串,再和这个在js中定义的字符串作比较,结果会怎样?


       


        比较的结果是false,问题出在哪里呢?

        问题出在那个转义字符 “\” 上。根据ECMAScript规范,字符串字面量所表示的字符串的值(string value,简称SV)是通过字面量中不同部分的字符值(character value,简称CV)描述的。其中:\ EscapeSequence 的CV就是EscapeSequence本身,那么最终SV就等于这个CV,之前那个字符串用语法形式表示就是:

        SourceCharacter but not single-quote ' or backslash \ or LineTerminator \ EscapeSequence

        最终,这个字面量的所表示的字符串的值就是:AAmwAAo3LAwtAAjSGABnAgI/CAw+AgrFBASy

        从input框读取的是字符串的值而非字面量,所以导致比较结果为false,这个值等价于字符串字面量:AAmwAAo3LAwtAAjSGABnAgI\\/CAw+AgrFBASy

        相关内容可参考ECMAScript Language Specification Edition 3 Final的7.8.4节

posted on 2011-02-11 14:08  dhj  阅读(314)  评论(0编辑  收藏  举报

导航