1.什么是字符串 (不能改变)
字符串也是一个数据结构(串),将同样的内容串在一块。因为在对应的js里面字符串属于一个值类型(值类型是常量 常量是不能变)作为存储结构增删改查的方法(字符串的增删改查 不能针对于本身 而是返回一个新的字符串)
2.字符串的声明
a.值类型赋值 (常用 栈上 )
var str = "hello world";
console.log(str == str1); //true
console.log(str === str1); //false
console.log(str === 'hello'); //true
console.log(str1 === 'hello'); //false
b.以new关键词声明(引用了对应的值的地址)
var str = new String("abc"); //引用了空值的地址
//在堆上 重新开辟一个新的内存空间(使用new关键词会重新开辟内存空间)
3.ES6新增 字符串模板
var a = 'jack'
var str = `hello string ${a}`
// 解析${} 以变量来解析
console.log(str);
//hello string jack
var number = 10
var str = `您的年纪是${number}岁`
console.log(str) //您的年纪是10岁
4.new String() 和 String() 区别
-
new String是构建一个String对象 (引用数据类型 有地址指向的)
-
String 单纯的将对应的传进入的参数转为string类型(值类型)
-
//new String和String的区别 var number1 = 10 var strNumber = String(number1) //字符串10 var strNumber1 = new String(number1) //字符串10 console.log(strNumber === '10'); // true 不会开辟新的内存空间 console.log(strNumber1 === '10'); //false 会开辟新的内存空间
5.字符串的属性
length属性 返回字符串的长度(包含空格及换行)
var str = 'a b'
console.log(str.length)//3
通过下标来获取对应的字符串
var str = 'abc'
console.log(str[0]) //a
6.自定义函数实现对应的indexOf方法及对应的lastIndexOf方法
//实现一下对应的indexOf方法
var searchStr = "abcdefabcde"
function indexOf(str,index){
if(!index){ //当前如果是undefined的值
index = 0 //默认为0
}
//得到str的长度
var len = str.length
//这个5是表示当前的字符串的总长度
for(var i=index;i<searchStr.length-len;i++){
var s = ''
for(var j=0;j<len;j++){
s+=searchStr[i+j]
}
if(s==str){
return i
}
}
return -1
}
function lastIndexOf(str,index){
if(!index && index!=0){ //当前如果是undefined的值 或者不为0
index = searchStr.length-1 //默认为最后一个
}
//得到str的长度
var len = str.length
//这个5是表示当前的字符串的总长度
for(var i=index;i>=len;i--){
var s = ''
for(var j=len-1;j>=0;j--){
s+=searchStr[i-j]
}
if(s==str){
return i
}
}
return -1
}
7.字符串的方法(返回新的字符串)
通过下标找字符串(char 字符)
charAt(下标)
var str = 'abc'
str.charAt(0) //返回的是a
charCodeAt (ACSII码)
var str = 'abc'
str.charCodeAt(0) //返回的是97
通过字符串找下标indexOf(找不到返回-1 找的到返回对应的下标值 number(第一次出现的))
indexOf 从前往后找
var str = 'abc'
console.log(str.indexOf('ab')) //返回的下标0
console.log(str.indexOf('d')) //找不到返回-1
console.log(str.indexOf('abc',0)); //默认后面的参数不写就是从下标0开始
//可以有俩个参数 第一个参数为 对应需要查询的字符串 第二个参数为 开始查找的下标
console.log(查询的字符串,开始查找的下标)
console.log(str.indexOf('b',2)) //从下标2开始找 找第一个出现b的位置 返回-1
var str = 'abbbccde'
console.log(str.indexOf('b',2)) //从下标2开始找 找第一个出现b的位置 2
lastindexOf 从后往前找
var str = 'abcdefgabcdef'
//lastIndexOf 从后往前找
console.log(str.lastIndexOf('abc'));//7
console.log(str.lastIndexOf('abc',str.length-1));//7
//字符串的length表示对应的长度 不写对应的后面的位置就是默认从最后一位开始
//指定从下标4开始 从后往前查找
console.log(str.lastIndexOf('abc',4));//0
//指定下标从1开始找 从后往前找 (可以包含后面的内容)
console.log(str.lastIndexOf('abc',1));//0
//search方法使用跟indexOf一样 但是search支持正则表达式 以及search不能指定开始位置 都是从0位置开始
//也就是说默认的情况下 对应的后面的下标可以省略 str.length-1
search 方法(和indexOf一样 支持正则表达式)
var str = 'abcdefgabcdef'
console.log(str.search(/abc/,0)) //从0的位置开始找 匹配ab的内容
console.log(str.search('abc')); //0
//当前这个正则表示查找abc 全局查找g以及不区分大小写i
var regx = /abc/gi
console.log(str.search('abc')); //0 /abc/正则表达式
console.log(str.search(regx)); //0
静态方法(通过构造方法名直接调用的叫做静态方法 他是对应的static修饰的)
静态方法 使用对应的类名直接点 使用static进行修饰的
fromCharCode 将对应的ascii码转为字符串
var str = String.fromCharCode(97) //返回的是一个字符串
console.log(str) //a
concat 将多个字符串转为连接成一个字符串返回
var str = 'hello'.concat('world')
console.log(str)//hello world
var str = 'hello'
var str1 = str.concat('world')
console.log(str1);
//连接方法concat 相当+
截取的方法
var str = 'hello'
//传入的参数 开始的下标 结束的下标(不包含结束位置)
var str1 = str.slice(1,3)
console.log(str1);//el
var str1 = str.slice()//截取全部
console.log(str1);//hello
var str1 = str.slice(1)//从下标1截取到末尾
console.log(str1);//ello
var str1 = str.slice(-1)//字符串最后一个字符
console.log(str1);//o
//字符串的不能变 所以没有增删改
// 增加其实就是 字符串连接重新赋值
str = str + ' world'
console.log(str);
substring(开始的下标,结束的下标)
var str = "abcdef"
//substring(开始的下标,结束的下标) 不包含结束的下标 必须具备开始位置(不支持负值) 结束位置可以写可以不写
console.log(str.substring(1));//bcdef
console.log(str.substring(1,3));//截取不包含最后一个下标 (默认不填str.length)bc
var str = 'abcdefg'
//substring 必须具备开始位置(不支持负值) 结束位置可以写可以不写
var str1 = str.substring(1) //从下标截取到结尾
console.log(str1);//bcdefg
var str1 = str.substring(2,5) //从下标2截取到下标5
console.log(str1);//cde
substr(开始的下标,个数)
// substr(开始的下标,截取的个数)
var str = "abcdef"
console.log(str.substr(1));//默认的情况是截取到最后 bcdef
console.log(str.substr(1,3));//从下标1开始截取 截取个数为3个 bcd
//substr 截取 开始位置 个数
var str = 'abcdefg'
var str1 = str.substr(1)//从下标1开始截取到末尾
console.log(str1);//bcdefg
var str1 = str.substr(1,3)//从下标1开始截取3个
console.log(str1);//bcd
trim 去除前后空格
var str = ' a b '
var str1 = str.trim()
console.log(str1);
转大写 toUpperCase
var str = 'abcA'
console.log(str.toUpperCase())
var str = 'abcABcd'
var str1 = str.toUpperCase()//转大写
console.log(str1);
转小写 (toLowercase)
var str = 'abcA'
console.log(str.toLowerCase())
var str = 'abcABcd'
var str1 = str.toLowerCase()//转小写
console.log(str1);
8.支持正则的方法(4个) 同时也支持填入字符串
【注意】g是全局变量 i是不区分大小写
search 查找(找到返回下标 没找到返回-1) 有无g无影响
var regx = /abc/gi
var str = 'abc,Abc,Ab'
//search 查找 根据正则查找对应的下标 找不到返回-1(类似于indexOf)(number)
var index = str.search(regx)
console.log(index);//0
var str = 'abcdefgabcdef'
console.log(str.search(/abc/,0)) //从0的位置开始找 匹配ab的内容
console.log(str.search('abc')); //0
split 分割 将对应的字符串分割成对应的数组 和join是相对的 返回数组 有无g无影响
//split 分割的方法 将对应的字符串分割成对应的数组 (Array)和join是相对的
var regx = /,/gi;
var splitArray = str.split(regx);
console.log(splitArray);
//分割 成为一个数组 split 数组变成字符串 join (默认以,)
var str = '1,2,3'
//默认不是以,作为分割 默认不分割 直接填入到数组
console.log(str.split()); //['1,2,3']
console.log(str.split(',')); //['1','2','3']
replace 替换 (将找到的第一个字符串替换成一个新的字符串)(如果对应的正则里面有g那么全部替换否则只替换第一次找到的)
//replace 替换的方法 将对应的内容替换成某个内容然后返回 (String)
var regx = /abc/gi
var str = 'abc,Abc,Ab'
var newStr = str.replace(regx,'hello')//只会替换第一次找到的 (如果对应的正则里面有g那么全部替换否则只替换第一次找到的)
console.log(newStr);
var str = 'abca'
var str1 = str.replace('a','hello')//将a替换成hello
console.log(str1)
match 匹配 将匹配的内容(如果没有g没有只匹配第一个填入)填充到对应的数组返回 (Array)
//match 返回一个数组 (匹配的内容)
var str = "abcacc"
//默认只找第一个匹配的 加入到数组
var arr = str.match('a')
console.log(arr);
//match 匹配的 将匹配的内容(如果没有g没有只匹配第一个填入)填充到对应的数组返回 (Array)
var regx = /abc/gi;
var str = "abc,Abc,Ab";
var matchArray = str.match(regx);
console.log(matchArray);
总结
-
string是不能改变的(常量)
-
string的方法返回的都是一个新的字符串
-
string的length属性是只读的(不能赋值)读取对应的字符串的长度
-
字符串可以通过下标进行访问(string[i])
-
字符串方法 charAt charCodeAt
-
搜索 indexOf lastIndexOf search
-
支持正则的方法 search replace split match
-
截取的方法 substring substr
-
转大写和小写 toUpperCase和 toLowerCase
-
静态方法 fromCharCode 根据ascii转为字符串
9.Math类(数学类 一起和数学计算相关的方法都在这个里面且这个方法都是静态方法)
属性
PI 3.1415926
E 科学计算法
方法
random 随机数
round 四舍五入
floor 向下取整
ceil 向上取整
pow 取幂次方
sqrt 开平方
abs 取绝对值
max 最大值
min 最小值
....
//Math的属性
console.log(Math.PI);//圆周率
console.log(Math.E);//科学计数法
//相关的方法
var number = Math.max(1,2,3)
console.log(number);//3
var number = Math.min(1,2,3)
console.log(number);//1
var number = Math.pow(2,3)//2的三次方
console.log(number);//8
var number = Math.sqrt(4)//将4开平方
console.log(number);//2
//取整 *
// 向上取整 1.2 取 2
console.log(Math.ceil(1.2));//2
// 向下取整 1.99 取 1
console.log(Math.floor(1.3));//1
// 四舍五入 1.4 取 1 1.5 取 2
console.log(Math.round(1.5));//2
//随机数 random 随机生成0-1之间的数 包含0 不包含1
console.log(Math.random());
//abs 取绝对值 正就是正 负值也是正值
console.log(Math.abs(-10));//10