### 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代码,因此如果大括号内部是一个字符串,将会原样输出。