字符串
概述
字符串是一个基础的数据结构(串)。字符串也是基础的值类型(栈类型),字符串不可变。字符串一般在对应的算法中主要使用为对应的查找算法(贪心算法 (马拉车算法))。
字符串的声明
字面量声明
使用引号 (单引号,双引号)
var str = 'hello'
var str = "hello world"
使用字符串模板 (``)
//解析对应的js代码 ${} 里面可以解析对应的js代码
var n = 10
var str = `你的值为${n + 1}`
console.log(str) //你的值为11
使用new关键词声明
var str = new String() //无参 构建一个空的字符串对象
//传入对应的参数
var str = new String(123) //123的字符串
console.log(str)
字面量声明和new关键词声明的区别
- 字符串声明的变量typeof为string
- new关键词声明的变量typeof 为object
- 值和值之间是相等的 新的对象和另一个新的对象是不相等 ([]!=[])
- new关键词构建的字符串对象指向对应的值 (new String(123) == "123")
console.log(new String(12) == new String(12)) //false
console.log(new String(12) == "12") //true
console.log(new String(12) === "12") //false
var str = new String(45)
var str1 = str
console.log(str === str1) //true
console.log([] == []) //false
字符串相关属性
字符串具备length属性(只读属性) (长度)
var str = "abc"
console.log(str.length) //3
str.length = 5 //length是只读属性 不允许赋值
console.log(str.length)//3
字符串里面的字符可以使用下标进行访问
var str = "abc"
//通过下标访问对应的字符串中的字符
console.log(str[0]) //a
//可以对字符串进行遍历
for(var i=0;i<str.length;i++){
console.log(str[i])
}
字符串的方法 (都具备返回值)
以返回一个新的字符串来实现的
添加的方法
以字符串拼接的形式进行添加(+)
var str = "abc"
var newStr = str + "dfg"
console.log(str) //字符串不可变
console.log(newStr) //abcdfg
concat方法 (连接多个字符串)
//concat 拼接字符串
var str = "abc"
//字符串的方法的参数会进行隐式转换 转为对应的string类型 (自动调用toString方法)
var concatStr = str.concat("def",123)
console.log(str) //abc
console.log(concatStr) //abcdef123
删除的方法 (截取)
substring (从开始下标截取到结束下标)
var str = "abcdefg"
//传入俩个参数 第一个参数开始位置 第二个参数表示结束位置
var str1 = str.substring(1) //从下标1开始截取到末尾
console.log(str1) // bcdefg
var str1 = str.substring(1,4) //从下标1开始截取到下标4(不包含结束位置)
console.log(str1) // bcd
var str1 = str.substring() //截取全部 不建议
console.log(str1) //abcdefg
substr (从开始下标截取对应的个数)
var str = "abcdefg"
//传入俩个参数 第一个参数开始位置 第二个参数表示个数
var str1 = str.substr(1) //从下标1开始截取到末尾
console.log(str1) // bcdefg
var str1 = str.substr(1,4) //从下标1开始截取4个
console.log(str1) // bcde
var str1 = str.substr() //截取全部 不建议
console.log(str1) //abcdefg
slice (从开始下标截取到结束下标)
var str = "abcdefg"
//传入俩个参数 第一个参数开始位置 第二个参数表示结束位置
var str1 = str.slice (1) //从下标1开始截取到末尾
console.log(str1) // bcdefg
var str1 = str.slice (1,4) //从下标1开始截取到下标4(不包含结束位置)
console.log(str1) // bcde
var str1 = str.slice () //截取全部
console.log(str1) //abcdefg
修改的方法
replace 替换
//替换的方法
var str = "abcdabc"
//只执行一次
//需要替换的字符串 用于替换的字符串
var replaceStr = str.replace('a', 'f')
console.log(replaceStr) //fbcdabc
var replaceStr = str.replace('abc', '123')
console.log(replaceStr) //123dabc
//replace支持正则表达式
var regx = /a/g //里面包含a g全局
var replaceStr = str.replace(regx,'b')
console.log(replaceStr)
练习
//把"helloworldhelloworldhello123456abcabc" 里面所有的hello换成123
var str = "helloworldhelloworldhello123456abcabc"
//一直换 换的条件在于当前有hello
while (str.search('hello') != -1) {
//用str接收换完的值
str = str.replace('hello', '123')
}
console.log(str)
//删除里面的123 用于空值覆盖它
while (str.search('123') != -1) {
//用str接收换完的值
str = str.replace('123', '')
}
console.log(str)
查询的方法
indexOf 根据值查询对应第一次出现的下标
var str = "abcabc"
console.log(str.indexOf('a'))//0
console.log(str.indexOf('d'))//-1 找不到返回-1
console.log(str.indexOf('a',2))//从下标为2开始查找 3 (不支持传入负值)
lastIndexOf 根据值查询对应出现的下标 从后往前找
var str = "abcabc"
console.log(str.lastIndexOf ('a'))//3
console.log(str.lastIndexOf ('d'))//-1 找不到返回-1
console.log(str.lastIndexOf ('a',2))//从下标为2开始查找 0 (不支持传入负值)
search 搜索(和indexOf类似)
//search 支持正则
//根据对应的值返回下标 返回第一次找到的下标 不支持传入对应的位置
var str = "abcabc"
console.log(str.search('a')) //0
console.log(str.search('d')) //-1 找不到返回-1
console.log(str.search('a', 2)) //不支持传入位置 0
//支持正则
var regx = /a/
console.log(str.search(regx)) //0
charAt 根据下标获取字符
var str = "abc"
console.log(str.charAt(1)) //获取下标为1的字符 b
console.log(str.charAt(4)) //获取没有下标的值为空字符串
charCodeAt 根据下标获取字符串的ascii码
var str = "abc"
console.log(str.charCodeAt(1)) //获取b的ascii码 98
console.log(str.charCodeAt(4)) //获取没有的下标的ascii为NaN
静态方法
使用类名(大写字母开头)直接调用的方法叫静态方法 (Math.pow)
//静态方法
//将ascii码转为字符串 传入的ascii码值
var str = String.fromCharCode(97)
console.log(str)
支持正则的方法
-
replace 替换
-
search 查找
-
match 匹配
//match方法 //返回一个数组 var str = "abcdef" var matchArr = str.match('a') //[a] console.log(matchArr) var matchArr = str.match('1') //null 匹配不到返回空 console.log(matchArr) // 支持正则 var regx = /b/ console.log(str.match(regx)) //[b] -
split 分割
//split //返回字符串数组 //指定对应的分割符 var str = "a&b&c&d" console.log(str.split('&')) //[a,b,c,d] var str = "a,b,c,d," console.log(str.split(',')) //[a,b,c,d,''] //对应的limit个数 指定个数 console.log(str.split(',', 2)) //[a,b] // 支持正则 var regx = /,/ console.log(str.split(regx)) //[a,b]
Math相关方法
Math相关的属性及方法都是静态方法,Math中的内容都是用于数学计算的。
属性
Math.PI Π
console.log(Math.PI) //3.1415926
Math.E
console.log(Math.E) //2.718
方法
Math.min() 取最小值
console.log(Math.min(1,2,31,32))//1
Math.max() 取最大值
console.log(Math.max(1,2,31,32))//32
Math.random 取随机数(0-1 包含0不包含1)
console.log(Math.random()) //随机返回0-1的值
Math.abs() 取绝对值
console.log(Math.abs(-10)) //10
Math.floor() 向下取整
console.log(Math.floor(2.9)) //2
Math.ceil() 向上取整
console.log(Math.ceil(2.1)) //3
Math.round() 四舍五入
console.log(Math.round(2.4)) //2
console.log(Math.round(2.5)) //3
Math.pow() 取幂次方
console.log(Math.pow(2,3)) //2的三次方 8
Math.sqrt() 取平方根
console.log(Math.sqrt(4)) //4的平方根 2
Math.cos() 余弦
//Π为180度
console.log(Math.cos(0.25*Math.PI)) //45度的余弦
Math.sin() 正弦
//Π为180度
console.log(Math.sin(0.25*Math.PI)) //45度的正弦
Math.tan() 正切
//Π为180度
console.log(Math.tan(0.25*Math.PI)) //45度的正切
...
生成区间内的随机数
(最大值-最小值)* 随机数 + 最小值
//生成区间内容的随机整数
function randomNumber(min, max) {
return Math.round((max - min) * Math.random() + min)
}
console.log(randomNumber(10, 20))
随机颜色
rgb颜色
function randomColorToRGB(){
var r = randomNumber(0,255)
var g = randomNumber(0,255)
var b = randomNumber(0,255)
return `rgb(${r},${g},${b})`
}
16进制颜色
//生成16进制的颜色
function randomColorToHEX() {
//#000000 - #ffffff
return '#' + Math.floor(Math.pow(16,6) * Math.random()).toString(16)
}
console.log(randomColorToHEX())