### String
* toString() 将其他类型(不包括null和undefined)转换为string类型的字符串
* String() 将其他类型(包括null和undefined)转换为string类型的字符串
* indexOf(),lastIndexOf(),includes(), startsWith(), endsWith() 字符串查找
* charAt(),charCodeAt() 字符操作方法
* slice(),substr(),substring() 字符串操作方法
* trim() 删除字符串空格
* toLowerCase(),toLocaleLowerCase(),toUpperCase(),toLocaleUpperCase() 字符串大小写转换
* localCompare() 字符串比较
* 模版字符串
* * * * *
#### toString()
> String用于表示由0或多个16位Unicode编码字符组成的字符虚列,即字符串,在javascript中字符串可以由“”或‘’表示,但很多时候我们需要把其他的数据类型转为字符串类型,因此javascript为我们提供了toString()方法,除了null和undefined没有toString()方法外其他所有数据类型都有,同时toString()方法还可以传入一个参数,该参数的作用是指定输出的类型,参数可以传(2,8,10,16)对应返回二进制,八进制,十进制和十六进制,具体使用方式如下:
~~~
let v1 = 10
console.log(v1.toString()) // 10
let v2 = true
console.log(v2.toString()) // true
let v3 = 10
console.log(v3.toString(2)) // 1010
console.log(v3.toString(8)) // 12
console.log(v3.toString(10)) // 10
console.log(v3.toString(16)) // a
~~~
#### String()
> 那么问题来了,如何知道某个要转型的值是不是null或者undefined呢?
> 还可以使用转型函数String(),这个函数能将任何类型的值转为字符串,包括null和undefined,代码如下:
~~~
let v1 = 10
console.log(String(v1)) // 10
let v2 = true
console.log(String(v2)) // true
let v3 = null
console.log(String(v3)) // null
let v4
console.log(String(v4)) // undefined
~~~
#### indexOf(),lastIndexOf(),includes(), startsWith(), endsWith()
> indexOf() , lastIndexOf(),这两个方法都是从一个字符串中搜索给定的子字符串,然后返回子字符串的位置(如果没有找到子字符串则返回-1),这两个方的区别是:indexOf()是从字符串开头向后搜索,lastIndexOf()则是从字符串末尾向前搜索,代码如下:
~~~
let s = "Hello world!"
console.log(s.indexOf("H")) //0
let s = "Hello world!"
console.log(s.lastIndexOf("H")) //10
~~~
> includes():返回布尔值,表示是否找到了参数字符串。
~~~
let s = "Hello world!"
console.log(s.includes("Hello")) //true
~~~
>startsWith():返回布尔值,表示参数字符串是否在源字符串的头部。
~~~
let s = "Hello world!"
console.log(s.startsWith("Hello")) //true
~~~
>endsWith():返回布尔值,表示参数字符串是否在源字符串的尾部。
~~~
let s = "Hello world!"
console.log(s.endsWith("Hello")) //false
~~~
#### charAt(),charCodeAt()
> charAt(),charCodeAt()是javascript中用于访问字符串中特定字符的方法,这两个方法都接收一个参数,即基于0但字符位置,其中charAt()方法以单字符形式返回给定位置的那个字符,例如:
~~~
let s = "hello world"
console.log(s.charAt(1)) // e
~~~
> 如果你想得到的是字符编码而不是字符串,那可以使用charCodeAt()方法,如下:
~~~
let s = "hello world"
console.log(s.charCodeAt(1)) // 101
~~~
#### slice(),substr(),substring()
> javascript提供了slice(),substr(),substring()这三个方法来操作字符串,这三个方法都返回一个字符串值,而且也都接收一个或两个参数,第一个参数(在没有指定第二个参数的情况下)指定返回字符串的起始位置,第二个参数(在指定情况下)表示返回字符串的结束位置,具体来说slice(),substr()对第二个参数指定的是子字符串最后一个字符串的位置,而substring()对第二个参数指定的则是返回的字符串个数,如果没有给这些方法第二个参数,就相当于指定字符串长度为结束位置。
>与concat()一样,这三个方法并不会改变原始字符串,具体使用方法如下:
~~~
let s ="hello andy"
console.log(s.slice(3)) // "lo andy"
console.log(s.substring(3)) // "lo andy"
console.log(s.substr(3)) // "lo andy"
console.log(s.slice(3,7)) // "lo a"
console.log(s.substring(3,7)) // "lo a"
console.log(s.substr(3,7)) // "lo andy"
~~~
> 需要注意的是,在传递的参数是负值的情况下,他们的行为就不尽相同了,slice()方法回将传入的负值与字符串的长度相加,substr()方法回将负的第一个参数加上字符串长度,而将负的的二个参数转换为0,substring()方法会将所有的负值参数都转换为0,代码如下:
~~~
let s ="hello andy"
console.log(s.slice(-3)) // "ndy"
console.log(s.substring(-3)) // "hello andy"
console.log(s.substr(-3)) // "ndy"
console.log(s.slice(3,-3)) // "lo a"
console.log(s.substring(3,-3)) // "hel"
console.log(s.substr(3,-3)) // " "
~~~
#### trim()
> trim()方法会创建一个字符串的副本,删除前置和后缀的所有空格,与上面方法一样,该方法并不会改变字符串原始值,代码如下:
~~~
let s = " andy "
console.log(s.trim()) // "andy"
~~~
#### toLowerCase(),toLocaleLowerCase(),toUpperCase(),toLocaleUpperCase()
> 在javascript中需要转换字符串的大小写可以使用toLowerCase(),toLocaleLowerCase(),toUpperCase(),toLocaleUpperCase() 这四个方法,代码如下:
~~~
let s = "andy"
let i = "ANDY"
console.log(s.toLowerCase()) // "ANDY"
console.log(s.toLocaleLowerCase()) // "ANDY"
console.log(i.toUpperCase()) // "andy"
console.log(i.toLocaleUpperCase()) // "andy"
~~~
#### localCompare()
> localCompare()这个方法用来比较两个字符串,如果字符串在字母表中的位置排在参数之前,则返回一个负数(大多返回-1,具体视情况而定),如果字符串等于参数,则返回0,如果字符串在字母表中的位置排在参数之后,则返回一个正数(大多是1,具体视情况而定),代码如下:
~~~
let s = "jack"
console.log(s.localCompare("tom")) // -1
console.log(s.localCompare("andy")) // 1
console.log(s.localCompare("jack")) // 0
~~~
#### 模版字符串
> 在es6之前,我们的网页通过ajax加载的数据需要渲染在网页中是通过创建dom以及字符串拼接的方式插入到dom节点中,这样做非常不方便,es6为我们提供了模版字符串来解决这个问题,模板字符串(template string)是增强版的字符串,用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。示列如下:
~~~
// 普通字符串
`In JavaScript '\n' is a line-feed.`
// 多行字符串
`In JavaScript this is
not legal.`
console.log(`string text line 1
string text line 2`);
// 字符串中嵌入变量
let name = "Bob", time = "today";
`Hello ${name}, how are you ${time}?`
~~~
> 上面代码中的模板字符串,都是用反引号表示。
>如果在模板字符串中需要使用反引号,则前面要用反斜杠转义。
>使用模板字符串表示多行字符串,所有的空格和缩进都会被保留在输出之中。你也可以通过trim()方法消除空格和缩进。
>模板字符串中嵌入变量,需要将变量名写在${}之中。
>( {} )大括号内部可以放入任意的JavaScript表达式,可以进行运算,以及引用对象属性。
>通过 {} 模板字符串之中还能调用函数。
>如果大括号中的值不是字符串,将按照一般的规则转为字符串。
>比如,大括号中是一个对象,将默认调用对象的toString方法。
>由于模板字符串的大括号内部,就是执行JavaScript代码,因此如果大括号内部是一个字符串,将会原样输出。