Go to comments

JavaScript 转义字符

1、先了解字符串

学习正则之前,先了解一下字符串,字符串之所以叫字符串因为两边有"引号",比如下面的"abcdef"是字符串

var str = "abcdef";

console.log(str); // abcdef


现在想在字符串里面显示一个"文本的引号"能办到吗?直接在字符串里面写引号,"ab"cdef" 前面"ab"成一对引号,后面 cdef" 的这个引号,发生了识别错误

var str = "ab"cdef"; // "ab"前面的引号成一对 ,cdef"后面的引号往后找


所以一般情况下的经验是

1). 双引号里面套单引号

2). 单引号里面套双引号

var str = "ab'cdef";  // 双引号里写单引号

var str1 = 'ab"cdef'; // 单引号里写双引号

console.log(str, str1); // ab'cdef ab"cdef

image.png


但是就想在双引号里面写个双引号能办到吗?

在字符串里面写双引号的话 "ab"cdef" 说明一个问题,这个双引号是正常的语法规定,它会先识别为语法其次再按文本来,能识别为语法就不按文本来


2、转义字符 \

这时候想让它不按照语法来,怎么办呢?

在前面加一个 \ 叫转义符号 "ab\"cdef",这个叫"反斜杠"(不是问号下面那个斜杆,问号下面是注释用的那个斜杆)


这个反斜杠正常写到字符串里面,会把反斜杠后面接着那个字符取消掉它原来的意思(它原来的意思识别为语法规定和前面的双引号成对出现),加一个转义符号之后就转义成正常文本,就能当做一个正常文本(变成文本双引号)来输出

转义符号本身输不出来,也就是说它俩 \" 成一组了"ab\"cdef"

var str = "ab\"cdef";

console.log(str); // ab"cdef


这是转义符号的第一点用途,也就是说有些特殊的东西没法写在文本里面,通过转义符号就可以了。


注意一下,

想在字符串里面打印一个转义符号怎么办?转移符号有自身的语法,想消除转移符号的自身语法怎么办?再来一个转义符号把它转义了"ab\\cdef"

var str = "ab\\cdef";

console.log(str); // ab\cdef


这是转义符号基本的用法,还有一些高难的用法。

转义符号除了能把后面的东西转义以外,它配合一些特殊的字母还有特殊的语法意义。


比如转义符号配合一个n,转义符号后面加上一个n,\n 他两个就变成一个功能叫"换行"就我们所说的回车

var str = "ab\ncdef"; // 字符串变成两行的字符串

console.log(str);

image.png


但是用document.write()写到页面上是不能换行的,因为document.write(str)是当做文档流输入页面的,文档里面识别不了回车,回车都变成文字分隔符了(变空格了)

var str = "ab\ncdef";

document.write(str); // ab cdef

所以想看是不是多行字符串只能在控制台输出console.log


3、字符串换行符\n

除了\n以外还有\r\r是干什么的呢?

window系统按一个回车,在系统底层相当于一个 \r\n,这个回车代表行结束了(换行了),

但是在linux操作系统里面,一个回车只有一个\n,这是一个小区别。


\r 是行结束符,但是这样看不出什么效果

var str = "ab\rcdef";

console.log(str); // abcdef


\r\n 字符串就换行了

var str = "ab\r\ncdef";

console.log(str);

image.png


\t

还有\t是table的缩写,"teb键"也是table的缩写,是"制表符"的意思,

一个\t代表一个缩进、二个\t代表两个缩进,一个缩进一般情况下代表四个空格,根据操作系统而定。

var str = "ab\ttcdef";
console.log(str);

var str = "ab\t\tcdef";
console.log(str);

var str = "abt\t\t\tcdef";
console.log(str);

image.png


还有什么\f等一大堆

先记着这几个

\r  行结束

\n 是换行

\t  是制表符


4、多行字符串

打印多行字符串用\n,想把字符串变成多行"ab\ncdef",这种多行是在真正的结果上实现多行,但这种东西往往没有意义,真正有意义的是在编程上让字符串换行


比如,在body里面写dom结构,dom结构要符合一个原则好维护,好维护就希望字符是串多行的

document.body.innerHTML = "<div>
                                 <span></span>
                           </div>";

但是上面这样写,报低端语法解析错误Uncaught SyntaxError: Invalid or unexpected token,系统规定字符串是不能多行显示的


所以必须这么写,这么写就没意义了

document.body.innerHTML = "<div><span></span></div>";


有什么办法又能写多行字符串又不能报错怎么办呢?还得依赖于转义字符,在每一行的结束加一个"转义字符",它会把每一行后面文本形式的回车转义掉,让它不再是是回车

document.body.innerHTML = "\
                           <div>\
                             <span></span>\
                           </div>\
                           ";

所以有了转义字符放到每一行后面之后,多行字符串就可以实现了,并输出到body标签里面


直接把多行字符串赋给一个变量text,打印text变量到控制台

var test = "\
            <div>\
                <span></span>\
            </div>\
            ";

console.log(test);

在控制台看是一行的字符串,但写的时候是多行写的


当然还有一些多行的办法,比如完全用字符串连接的方法用加号也能换号,但这么写比较low了

var text = '<div>' +
                '<span></span>' +
            '</div>';
            
console.log(text);

这个转义字符能做的事很多,基本上通用的常用的也就这么多。



Leave a comment 0 Comments.

Leave a Reply

换一张