53、创建字符串
* 创建字符串的方式
* 1.字面量的形式创建字符串
* var str = 'abc'
* 2.内置构造函数的形式创建字符串
```js
var str = new String()
console.log(str)
var str = new String('abc')
console.log(str)
```
54、字符串的索引与下标
* 字符串的length与下标
*
* length与下标的含义与数组中的一样
* length: 长度
* 索引(下标):获取到字符串中指定位置的值
* 注意:字符串中通过索引能够获取到指定位置的值,只不过获取到的值是只读的
换句话说 获取到的值,能看不能改
```js
var str = 'abc'
console.log(str.length)
console.log(str[1])
str[1] = 'Q'
console.log(str)
```
55、字符串的方法
(1).charAt
* 语法:字符串.charAt(索引)
* 作用:查询指定下标的值
* 返回值:查询到的值,如果没有查询到就是一个空字符串
```js
var str = 'abcd'
var str1 = str.charAt(0)
console.log(str1) //a
var str2 = str.charAt(50)
console.log(str2) //因为没有查询到,返回的是空字符串
```
(2).charCodeAt
* 语法:字符串.charCodeAt(索引)
* 作用:查询指定下标的值 对应的 十进制码
* 返回值:查询到的值对应的十进制码 如果没有查询到会返回一个NaN
```js
var str = 'abcd'
var str1 = str.charCodeAt(0)
console.log(str1) //字符串a的十进制码 97
var str2 = str.charCodeAt(50)
console.log(str2) //因为没有查询到 返回一个NaN
```
(3).toLowerCase
* 语法:字符串.toLowerCase()
* 作用:将这个字符串转换为小写
* 返回值:转换后的字符串
```js
var str1 = 'abcDEF'
var str2 = 'QWER'
var str3 = 'asdf'
console.log(str1.toLowerCase())
console.log(str2.toLowerCase())
console.log(str3.toLowerCase())
```
(4).toUpperCase
* 语法:字符串.toUpperCase
* 作用:将这个字符串转换为大写
* 返回值:转换后的字符串
```js
var str1 = 'abcDEF'
var str2 = 'QWER'
var str3 = 'asdf'
console.log(str1.toUpperCase())
console.log(str2.toUpperCase())
console.log(str3.toUpperCase())
```
*
(5).substr
* 语法:字符串.substr(开始索引, 多少个)
* 作用:截取指定的字符串
* 返回值:截取到的字符串
* 注意:mnd说明这个方法将来某一天可能会删除,所以建议我们使用substring
```js
var str = 'qwertyuiop'
var str1 = str.substr(0, 3)
console.log(str1)
var str1 = str.substr(3, 2)
console.log(str1)
```
(6).substring
* 语法:字符串.substring(开始索引, 结束下标)
* 作用:截取指定的字符串
* 返回值:截取到的字符串
* 注意:
* 1.参数包前不包后
* 2.结束索引可以不写,相当于写了length(字符串的总长度)
```js
var str = 'qwertyuiop'
var str1 = str.substring(0, 3)
console.log(str1)
var str2 = str.substring(0)
console.log(str2)
```
(7).slice
* 语法:字符串.slice(开始索引, 结束索引)
* 作用:截取指定字符串
* 返回值:截取到的字符串
* 注意:
* 1.参数包前不包后
* 2.结束索引可以不写,相当于写了length(字符串的总长度)
* 3.开始索引可以不写,相当于写了0
* 4.结束索引支持写负数,相当于length +负数
```js
var str = 'qwertyuiop'
var str1 = str.slice(0, 3)
console.log(str1)
var str2 = str.slice(0)
console.log(str2)
var str3 = arr.slice()
console.log(str3)
var str4 = str.slice(0, -3)
console.log(str4)
```
(8).concat
* 语法:字符串.concat(数据1, 数据2, 数据3...)
* 作用:将字符串和参数传递的数据 进行拼接
* 返回值:拼接后的字符串
```js
var str = 'qwer'
var str1 = str.concat('@', '+', '!')
console.log(str1) //qwer@+!
```
*
(9).indexOf
* 语法:字符串.indexOf(数据, 开始下标)
* 作用:寻找数据在字符串中的位置
* 返回值:找到的时候返回下标,找不到返回-1
* 注意:第二个参数可以不传递,默认为0
```js
var str = 'qwer'
var str1 = str.indexOf('q', 1)
console.log(str1)
var str1 = str.indexOf('q', 0)
console.log(str1)
var str1 = str.indexOf('q')
console.log(str1)
```
*
(10).lastIndexOf
* 语法:字符串.lastIndexOf(数据, 开始索引)
* 作用:寻找数据在字符串中的位置(从后往前/从右向左)
* 返回值:找到的时候返回下标,找不到返回-1
* 注意:第二个参数可以不传递,默认为length - 1
```js
var str = 'qwer'
var str1 = str.lastIndexOf('e', 1)
console.log(str1)
var str1 = str.lastIndexOf('e')
console.log(str1)
```
*
(11).split
* 语法:字符串.split('符号')
* 作用:在字符串中找到'符号' 然后将这个字符串分隔,并放在一个数组内
* 返回值:一个数组
* 注意:参数如果传递的是 空字符串('') 会将字符串全部分隔开
```js
var str = 'qwer, tyui, asdf, ghjk'
console.log('原始字符:', str)
var str1 = str.split(',')
// 通过, 将字符串str分隔到一个数组中
console.log(str1) //['qwer', ' tyui', ' asdf', ' ghjk']
var str2 = str.split('i')
// 通过i 将字符串str分隔到一个数组中
console.log(str2) //['qwer, tyu', ', asdf, ghjk']
var str3 = str.split(' ')
// 通过一个空格 将字符串str分隔到一个数组中
console.log(str3) //['qwer,', 'tyui,', 'asdf,', 'ghjk']
var str4 = str.split('')// 通过一个空字符串 将字符串str分隔到一个数组中
console.log(str4)
// ['q', 'w', 'e', 'r', ',', ' ', 't', 'y', 'u', 'i', ',', ' ', 'a', 's', 'd', 'f', ',', ' ', 'g', 'h', 'j', 'k']
var str5 = str.split('@')// 通过一个@ 将字符串str分隔到一个数组中
console.log(str5) //['qwer, tyui, asdf, ghjk']
```
!(12).trim
* 语法:字符串.trim()
* 作用:去掉字符串两侧的空格
* 返回值:去掉空格后的字符串
```js
var str = ' a b c '
console.log('原始的字符串:', str)
var str1 = str.trim()
console.log(str1) //a b c
```
(13).trimStart / trimLeft
* 语法:字符串.trimStart() / 字符串.trimLeft()
* 作用:去掉字符串开始(左侧)的空格
* 返回值:去掉空格后的字符串
```js
var str = ' a b c '
console.log('原始的字符串:', str)
var str1 = str.trimStart()
var str2 = str.trimLeft()
console.log(str1)
console.log(str2)
```
*
(14).trimEnd / trimRight
* 语法:字符串.trimEnd() / 字符串.trimRight()
* 作用:去掉字符串结束(右侧)的空格
* 返回值:去掉空格后的字符串
```js
var str = ' a b c '
console.log('原始的字符串:', str)
var str1 = str.trimEnd()
var str2 = str.trimRight()
console.log(str1)
console.log(str2)
```
!(15).includes
* 语法:字符串.includes(字符串片段)
* 作用:判断 当前字符串中,是否拥有指定字符串片段
* 返回值:一个布尔值
* true -> 拥有
* false -> 没有
```js
var str = 'qwertyuiop'
var str1 = str.includes('tyui')
console.log(str1)
var str2 = str.includes('tyuip')
console.log(str2)
```
(16).startsWith
* 语法:字符串.startsWith(字符串片段)
* 作用:判断 字符串开头 是不是指定的字符串片段
* 返回值:一个布尔值
* true -> 是开头
* false -> 不是开头
```js
var str = 'qwertyuiop'
var str1 = str.startsWith('qwer')
console.log(str1)
var str2 = str.startsWith('wer')
console.log(str2)
```
(17).endsWith
* 语法:字符串.endsWith(字符串片段)
* 作用:判断 字符串结尾 是不是指定的字符串片段
* 返回值:一个布尔值
* true -> 是结尾
* false -> 不是结尾
```js
var str1 = str.endsWith('op')
console.log(str1)
var str2 = str.endsWith('qwer')
console.log(str2)
```
(18).replace
* 语法:字符串.replace('要被替换的字符', '替换的字符')
* 作用:找到当前字符串中第一个参数对应的值,然后将其替换为第二个参数
* 返回值:替换完成的字符串
```js
var str = 'abcdefg'
var str1 = str.replace('abc', '@@!!##')
console.log(str1)
var str2 = str.replace('qwer', '@@!!##')
console.log(str2)
```
56、课堂案例(面试题)
* 一道面试题
* 统计字符串中每个字符串出现的次数(以对象的形式存储)
var str = 'aaabbbccddeeeea'
var obj = {}
for(var i = 0; i <= str.length; i++) {
var key = str[i]
if(obj[key] === undefined) {
obj[key] = 1
}
}
console.log(obj)
var str = 'aaabbbccddeeeea'
var obj = {}
for(var i = 0; i <= str.length; i++) {
var key = str[i]
if(obj[key] === undefined) {
obj[key] = 1
} else {
obj[key]++
}
}
console.log(obj)
var str = 'aaabbbccddeeeea'
var obj = {}
for(var i = 0; i <= str.length; i++) {
if(!obj[str[i]]) {
obj[str[i]] = 1
} else {
obj[str[i]]++
}
}
console.log(obj)
var str = 'aaabbbccddeeeea'
var obj = {}
for(var i = 0; i <= str.length; i++) {
if(!obj[str[i]]) {
obj[str[i]] = 1
} else {
obj[str[i]]++
}
}
console.log(obj)
57、课后练习
* ①. 反转字符串
* var str = 'abcdef'
* 代码处理后的 str === fedcba
```js
// 方法1
var str = 'abcdef'
// var newStr = str.split('')
// var newStr2 = newStr.reverse()
// var newStr3 = newStr2.join('')
var newStr = str.split('').reverse().join('')
console.log(newStr3)
// 方法2
var newStr = ''
for(var i = 0
var s = str.charAt(str.length-i-1)
newStr += s
}
console.log(newStr)
```
* ②.查询字符串
JS 中内把字符串分为几种类型(约定)
1. 普通字符串: '123asd阿松大'
2. 数字字符串: '123123123123123'
3. html格式字符串: '<p></p>'
4. 查询字符串: 'key=value&key2=value2&key3=value3'
* 一条数据: key=value
* 多条数据: & 符间隔
假设 str 存储的是后端反馈给我们的一个信息
var str = 'username=靓仔&age=18&qq=88888888'
需求1:
将'username=靓仔&age=18&qq=88888888'
更改为
{
username: '靓仔',
age: 18,
qq: 88888888
}
需求2:
将
{
username: '靓仔',
age: 18,
qq: 88888888
}
更改为
'username=靓仔&age=18&qq=88888888'
```js
var str = 'username=靓仔&age=18&qq=88888888'
var obj = {}
var arr = str.split('&')
arr.forEach(function(item) {
var itemInfo = item.split('=')
obj[itemInfo[0]] = itemInfo[1]
})
console.log(obj)
var newStr = ''
for (var k in obj) {
newStr += k + '=' + obj[k] + '&'
}
console.log(newStr)
newStr = newStr.slice(0, -1)
console.log(newStr)
```