JS对象:数组
对比Object-C中的数组,JavaScript数组有一些不一样的特点
JavaScript数组:无类型 动态 稀疏
无类型:指的是数组元素没有类型限制 可以是任意类型 string number boolean array object 这些类型都可以成为数组元素
动态:指的是数组的长度 会动态改变 不分可变数组与不可变数组
稀疏:指的是数组中两个元素下标可能不是连续的 无越界错误
例['1',,'2'] 1与2之间存在一个undefined 这样不会报错 下标1取到的值就是undefined
创建
let array = [1,2];//数组array存在两个元素 1 2
let array = new Array();// 无参数 空数组
let array = new Array(3); // 长度为3的数组
let array = new Array(5,"message");// 元素有5 ‘message’的数组
let array = Array.of(7);//创建有一个元素7的数组 [7]
数组的简单操作
#1.取值与赋值 长度
let value = array[0]; //获取下标为0的元素值
array[0] = 'newValue';//赋予新值
array.length //长度 OC中获取长度count
//用message 替换数组中从0下标(包含)开始 到9下标(不包含)结束的所有元素
例:['1','2','3'].fill('message',0,2) ['message','message',3]
array.fill('message',0,9);
#2.添加元素
array.push('newValue');//在数组末尾添加一个元素
array.unshift("firstValue");//在数组开头添加一个元素
array.splice(2,0,"insertValue");//在数组下标为2的位置插入一个元素
array.splice(2,0,"insertValue","insertValue")//在数组下标为2的位置连续插入两个元素
注意点:插入元素参数说明 第一个参数2 指定下标 第二个参数0 指定从下标2开始要删除几个元素 后面接着的多个元素则是要插入的元素
*如果同时存在需要删除与插入的情况 先执行删除操作 后执行插入操作 先删后插*
#3.删除元素
array.shift();//删除数组第一个元素
array.pop();//删除数组最后一个元素
array.splice(2,1);//删除数组下标2的元素
array.splice(2,3);//删除数组下标2 3 4的三个元素
array.splice(0,array.length);//删除全部元素
delete array[0];//这个方法删除的是 下标为0的元素的值 但是实体还是存在于数组中 数组长度不变
#4.合并多个数组
let array1 = ["1",'2'];
let array2 = ['3','4'];
let newArray = array1.concat(array2);
//此方法不会更改现有数组,而是返回一个新数组。
#5.将各元素拼接成字符串
let array = ['1','2'];
let str = array.join('&');//& 指的是拼接的字符串 数组中各元素之间分隔符 1&2
let str = array.toString();//分隔符固定,
#6.判断是否包含指定元素
let array = ['function','happy','sad','sad'];
//直接判断 包含返回true 不包含返回false
array.includes('happy');
//返回元素为'sad'的索引 参数1指的是从数组下标为1的元素开始向后排查 如果没有则返回-1 有则返回第一个满足条件的元素下标 这里是2
let sadIndex = array.indexOf('sad',1);
//返回数组中最后一个'sad'的下标 如果没有则返回-1 这里是3
let lastIndex = array.lastIndexOf('sad');
//让数组的每一个元素执行一次函数 返回数组中第一个满足条件的元素 参数value是数组中的元素 如果没有满足的 返回undefined
let value = array.find(value => {
return value == 'function';
});
//让数组的每一个元素执行一次函数 返回数组第一个中满足条件的元素下标 参数value是数组中的元素 如果没有满足的 返回-1
let index = array.findIndex(value => {
return value == 'happy';
});
//让数组中每一个元素都执行一次函数 只要有任意一个元素满足函数的判断就返回true
array.some(value=>value=='message');//判断数组中是否存在'message' 存在返回true 反之返回false
//自定义方法 遍历进行判断
#7.排序
array.reverse(); //将数组元素进行反转 例:[1,2,3] [3,2,1]
array.sort();//字符串数组 进行排序 升序
//采用函数判断 根据函数中的条件进行排序
array.sort((a,b) => {
//return a.length - b.length;//大的向后
return b.length - a.length;//小的向后
});
#8.从原数组中截取一部分 形成新的数组
let array = ['begin','find','end'];
let newArray = array.slice(1,3);//参数一 从什么下标开始(包含本下标元素) 参数二 到什么下标结束(不包含本下标元素)
let newArray = array.filter(value => value > 8);//获取数组中所有大于8的元素 形成一个新数组
#9.数组中每一个元素都执行一遍函数
//让数组中所有元素都加上了一个字符串new
array.forEach(value => array[array.indexof(value)] = value+'new');
//让数组中每个元素都加new 并返回形成一个新的数组
array.map(value => value + 'new');
#10.递归
let array = [1,2,3,3,4];
const reducer = (accumulator, currentValue) => accumulator + currentValue;
let newStr = array.reduce(reducer,'message');//值为message12334 'message'做为函数reducer的初始值 每次循环都会加上数组的下一个元素
let newStr = array.reduceRight(reducer,'message');//值为message43321 反向
let newStr = array.reduce(reducer);//值为13 正向1+2+3+3+4
#11.判读数组中所有元素是否都满足函数判断
array.every(value=>value==17);//如果全都满足返回true 不是全部都满足返回false
#12.数组内元素浅拷贝至数组内指定位置
let array = [1,2,3,4,5,6,7];
array.copyWithin(1,4,5);//完整形态
//1 指浅拷贝的元素要复制到什么位置上 这里从下标为1(包含) 的地方
开始
//4 指从什么地方开始复制元素 这里从下标4(包含)开始 默认是从0下标开始复制
//5 指复制到什么地方结束 这里复制到下标5(不包含)结束 默认是array.length
array.copyWithin(3);//简写 等价于array.copyWithin(3,0,array.length);
JS对象:字符串
字符串对象用于处理已有的字符块。
字符串用来储存一系列字符。
一般都直接用字符串就行了。
创建
let string = 'message';//变量 类型string
let string = String('message');//变量 类型string
let string = new String('message');//对象 类型object 一般情况不用这种方式 具体为什么 前辈提醒会拖慢执行效率
//以上三种创建方式 在函数的调用上 没有什么区别 都可以调用
字符串的简单操作
#1 长度获取 单个字符获取
string.length;
#2 字符获取
string[0];//获取字符串中第一个字符 (参数:字符位置)
string.charAt(0);//获取字符串中第一个字符 (参数:字符位置)
string.match(/s/g);//通过正则表达式匹配 找到一个或多个字符串
#3 Unicode编码与字符转换
string.charCodeAt(1);//返回字符串中位置1的字符的Unicode编码
String.fromCharCode(101);//返回Unicode编码为101 的字符
#4 字符串拼接
let str1 = 'mess';
let str2 = 'age';
let newStr = str1.concat(str2);//'message'
let newStr = str1 + str2;//'message'
//两种方式都可以得到同一个结果 都是在堆开辟空间 存放新数据
//后经过了解 两者性能相差不大
//web开发人员使用:concat大多用于数组操作 字符串的拼接基本都是用的“+”
#5 获取指定字符串在原字符串中位置
let index = string.indexOf('ge');//获取第一个'ge'字符串 在原字符串中的开始位置
let lastIndex = string.lastIndexOf('e');//返回最后一个字符串'e' 在原字符串中的位置
let seachIndex = string.search(/s/g);//返回正则表达式匹配的字符串的位置
#6 字符串替换
string.replace('messa','MESSA');//将指定字符串替换成新字符串(参数一 需要替换的字符串 参数二 替换的字符串)
#7 字符串截取
let newStr = string.slice(1,4);//截取从位置1(包含) 开始 到 位置4(不包含) 的字符串 返回一个新字符串
let newStr = string.substr(0,2);//获取从位置0(包含)开始 长度为2 的字符串
let newString = string.substring(0,2);//获取从位置0(包含)开始 到位置2(不包含)的字符串
//注意点 两个参数都是必须的 如果只指定一个参数 则是代表从指定位置(不包含)开始 截取到字符串最后
#8 字符串分割
let string = 'message8message';
var strS = string.split('8');//将字符串以分隔符8 为标准进行分割 返回字符串数组
#9 字符串大小写
string.toUpperCase();//全部大写
string.toLowerCase();//全部小写
#10 判断是否是指定字符串结尾
let string = 'message message';
var result = string.endsWith('ess',2);//是true 否false (参数一:指定结尾字符串 参数二:判断长度 从0开始 无指定则默认length)
//例子中 判断字符串从0开始 长度为2 的字符串中是否以'e'结尾
//理解:将字符串从0开始 长度2 截取出来'me' 然后判断'me'是否以'ess'结尾 例子中返回false
//一般用法:string.endsWith('ess');//判断字符串是否以'e'结尾
#11 判断字符串中是否存在指定字符串
var result = string.includes('ess',0);//ture false (参数0 指定从什么位置开始搜索到最后)
#12 空格剔除
string.trim();//剔除前后空格
string.trimLeft();//剔除前端空格
string.trimRight();//剔除后端空格
#13 支持正则表达式的字符串函数操作
search match replace split