js高级复习
一、数据类型
1.Number
2.String
3.Boolean
4.Null
5.Undefined
二、数组
数组类型
1.关联数组 :以数字为下标,如arr[0]
2.索引数组: 以非数字为下标,如字符串 arr.index
三、数组API
转字符串
1、String(arr): 将arr中每个元素转为字符串,用逗号相连
2、arr.join(“连接符”)
arr.join("") // 无缝拼接
arr.join("")==="" // 可判断空数组
拼接和选取
强调:拼接和选取都无权修改原数组,只能返回新数组,必须用变量接住返回值
拼接
var newArr = arr1.concat(值1,值2,arr2) // 将值1,值2,arr2中的每个元素,拼接到arr1结尾
注:可打散数组类型参数
选取
- 负参数:倒数第n个,自动执行length-n
- 省略第二个参数:从start一直选取到结尾
- 省略全部两个参数:复制整个数组
修改数组
删除元素
- arr.splice(start,n) //删除arr中start位置开始的n个元素
- 支持负数参数,表示倒数第n个
- 返回被删除的元素组成的临时数组
强调:直接修改原数组
插入元素
arr.splice(start,0,值1,值2,..)
强调:如果插入子数组,会变成二维数组
替换
arr.splice(start,n,值1,值2,...) //先删除arr中start位置的n个元素,再在start位置插入新元素
强调:删除元素个数不一定和插入元素个数一致
扩展用法- 广告轮播
imgs = imgs.concat(imgs.splice(0,n)) //移除开头的n个元素拼接到结尾
imgs = imgs.splice(-n).concat(imgs) //移除结尾的n个元素拼接到开头
翻转
arr.reverse() //翻转数组头尾顺序
排序
手写排序
冒泡,快速插入,依次比较相邻两数,如果前数>后数,就交换位置
for(var r=1;r<arr.length;r++){
for(var i=0;i<arr.length-r;i++){
if(arr[i]>arr[i+1]){
arr[i]=[arr[i+1],arr[i+1]=arr[i]][0];
}
}
}
API排序
arr.sort() //将arr中每个元素转为字符串,再按字符串升序排列
问题:只能按字符串升序排列
自定义比较器:比较两个值大小的函数
- 两个参数a,b
- 返回值:- a>b,返回正数 - a<b,返回负数 - a==b,返回0
- function compare(a,b){return a-b;}
- 将比较器函数作为对象传入sort方法:arr.sort(compare)
- 降序:颠倒比较器函数返回值正负号
String
什么是: 多个字符组成的只读字符数组
vs数组:
-
相同
a. 下标
b. .length
c. for遍历
d. slice() -
不同: 两者类型不同,API不通用
强调:所有String API都无权修改原字符串,只能返回新字符串
String API
大小写转换
- str.toUpperCase() //转大写
- str.toLowerCase() //转小写
获取指定位置字符
var char = str.charAt(i) //省略i,默认为0
选取子字符串
- var subStr = str.slice(starti,endi+1) // 同数组的slice
- str.substring(starti,endi+1) //不支持负数参数
- str.substring(starti,starti+n)
查找关键词
- 查找一个固定的关键词出现位置
var i = str.indexOf("关键词",fromi) //在str中从fromi位置查找下一个关键词的位置
// 返回值:
// 找到,返回关键词所在位置
// 找不到:返回-1
// 优点:可以指定开始位置,可以找所有
// 缺点:不支持正则,一次只能找一种关键词
- 判断是否包含符合规则的关键词
var i=str.search(/正则表达式/i)
// 返回值:
// 如果返回-1,说明不包含,如果返回不是-1,说明包含。永远只找第一个关键词的位置
// 优点:支持正则
// 缺点:
// 1) 不能设置开始查找位置,只能找第一个,不能找所有。
// 2) 只能返回位置,不能返回关键词内容
// 3) 不支持g
- 获取所有关键词的内容
var kwards=str.match(/正则表达式/ig)
// 返回包含所有关键词的数组,如果没找到,返回null
// 优点:获得所有关键词的内容
// 缺点:无法返回每个关键词的位置
- 即获得每个关键词的内容,又获得每个关键词的位置
regexp.exec(str)
替换
简单替换
- 将所有关键词都替换为统一的新值
- str=str.replace(/正则表达式/ig,“替换值”)
- 问题: 无法根据不同的关键词,选择不同的值替换
高级替换
根据每个关键词的不同,动态返回不同的替换值
str=str.replace(/正则表达式/ig,function(kw,$1,$2,...){
//kw: 会自动获得本次找到的完整关键词
//$n: 会自动获得本次找到的关键词中第n个分组的子内容
return 根据不同kw,返回不同替换值
})
衍生
删除: 替换为空字符串
格式化:
- 用正则对原始字符串分组,var reg=/(\d{4})(\d{2})(\d{2})/
- 正则中每个分组都会自动获得一个分组序号,从1开始
- 在replace的替换值中使用$n,重新拼接新的格式 birth.replace(reg,"$1年$2月$3日")
切割
简单切割: var subs=str.split(“分隔符”) //多段子字符串组成的数组,切割后的结果中不包含分隔符
复杂切割: var subs=str.split(/正则表达式/) //多段子字符串组成的数组,切割后的结果中不包含分隔符
扩展: var chars=str.split("") //将字符串打散为字符数组