Go to comments

JavaScript 转义字符

1、先了解字符串

学习正则之前,先了解一下字符串,

字符串之所以叫字符串因为两边有 "引号",比如下面的 "abcdef" 是字符串

var str = "abcdef";

console.log(str); // abcdef


想要在字符串里面显示一个 " 文本的引号能办到吗?

1. 直接在字符串里面写引号 "ab"cdef"

2. 前面 "ab" 成一对引号,

3. 后面 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 以外,

还有 \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

换一张