【转】小心转义符号 --- 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节