模板字符串-不要随便换行、缩进

2021-01-31  本文已影响0人  iamsharleen

定义

模板字符串使用反引号 (``) 来代替普通字符串中的用双引号和单引号.
模板字符串可以包含特定语法(${expression})的占位符。

使用例子

`string text`
// 支持多行字符串
`string text line 1
 string text line 2`
// 支持插入表达式
`string text ${expression} string text`

在使用多行字符串的时候,很容易掉进一个坑。我们敲代码的时候习惯性的缩进,在模板字符串里面缩进符也是模板字符串中的一部分。

function toString() {
  return `POST / HTTP/1.1\r
    X-Foo2: customed\r
    Content-Type: application/x-www-form-urlencoded\r
    Content-Length: 11\r
    \r
    name = client1`;
}

上面的函数看起来是不是没问题,整整齐齐的。但是因为我想做的是模拟一个HTTP协议(真正的写法是有表达式的),结果发送出去服务器端接收出问题。开始我一直以为我服务器端代码写错了。检查了很久之后,把这段东西直接打印出来,发现好像不太一样~~

\\ 打印出来的结果是这样的
"POST / HTTP/1.1
    X-Foo2: customed
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 11
    
    name = client1"

\\ 如果不用模板字符串,用普通的双引号,结果是这样的
"POST / HTTP/1.1
X-Foo2: customed
Content-Type: application/x-www-form-urlencoded
Content-Length: 11

name = client1"

用模板字符串会,打印出来的结果会有缩进。
MDN中有定义:

在新行中插入的任何字符都是模板字符串中的一部分.

所以,如果你的函数的理想结果是会对缩进、换行等字符敏感的,使用模板字符串的时候,小心不要根据平时习惯来写。

function toString() {
     return `POST / HTTP/1.1\r
X-Foo2: customed\r
Content-Type: application/x-www-form-urlencoded\r
Content-Length: 11\r
\r
name = client1`;
}

MDN参考文档

上一篇 下一篇

猜你喜欢

热点阅读