这是我参与更文挑战的第2天,活动详情查看: 更文挑战
什么是字符串
字符串是我们在学习JavaScript时经常见到的一种数据类型,它通常用两个双引号(”)、单引号(‘)或者反引号(`)组成,就像下面这样
let name = "李华"
let home = '河南'
let job = `程序员`
复制代码
犹如需要闭合的html标签一样,我们在写字符串时也需要保持首尾一致,例如开头是双引号,结尾也必须是双引号,下面的例子会报错
let name = "李华' // Uncaught SyntaxError: Invalid or unexpected token
复制代码
字符字面量
字符串数据类型包涵一些字符字面量,用于表示非打印字符或有其他用途的字符,比如换行符 \n
,但是请注意,html并不识别这些特殊的非打印字符,他们在html中既不显示,也不起作用,将会被解析为一个空格
<div id="wrap">
</div>
复制代码
const text = 'hello \n world'
const wrap = document.getElementById('wrap')
wrap.innerHTML = text
复制代码
像这样的特殊字符一共有下面几种
字面量 | 含义 |
---|---|
\n | 换行 |
\t | 制表 |
\b | 退格 |
\r | 回车 |
\f | 换页 |
\xnn | 以十六进制编码nn表示的字符(其中n是十六进制数字0-F),例如\x41等于”A“ |
\unnnn | 以十六进制编码nnnn表示的Unicode字符(其中n是十六进制数字0-F),例如\u03a3等于古希腊字符”Σ“ |
注意,如果换行、制表、回车、换页字面量将会解为为一个空格。
我们可以发现,字符字面量就是一个反斜线加上指定字符形成的,那如果有时候我们不想这些字面量生效,只是想单纯的展示一个字符串 \n 怎么办呢,我们可以在前面再加上一个反斜线 \
,就可以将后面的反斜线转移为一个正常的字符
const text = 'hello \\n world'
const wrap = document.getElementById('wrap')
wrap.innerHTML = text
复制代码
同样的道理也可以适用于单引号、双引号和反引号,如果我们想在字符串中正常的显示他们,只需要在他们前面加上一个反斜线 \
就行了。
还有一个注意点就是,既然这些字面量不像我们看到的那样进行展示,那么他们是否还占字符串长度呢?我们可以来试验一下
'hello\nworld'.length -> 11 // 解析为 hello world
'hello\x41world'.length -> 11 // 解析为 helloAworld
'hello\bworld'.length -> 11 // 解析为 helloworld
复制代码
可见,length属性是获取的字符字面量被解析后的内容所占的长度。值得注意的是 \b
虽然没有被解析为一个空格,但它还是占一个长度。
转为字符串
在很多时候我们需要将目标值转为字符串再进行操作或者展示,这时候我们就可以用下面的两种方法
toString()
一种是几乎所有值都有的toString()方法
true.toString() // "true"
10.toString() // "10"
let a = new Object()
a.toString() // "[object Object]"
复制代码
多数情况下toString()方法不接收参数,不过如果在对数字类型的值调用toString()方法时可以传一个进制参数,表示你想把这个数值转为几进制的数字的字符串类型。例如
10.toString(2) // "1010"
复制代码
直接加一个空字符串
另一中方法就是直接给目标值加上一个空的字符串,因为任何值与一个字符串相加的时候,都将先被转换为一个字符串在进行计算,这个我们可以在加号操作符相关的文章内看到。