目录
一、数组
1.数组的定义
1.使用Array构造函数
var arr=new Array();
arr[0]=100;arr[1]=200;//通过索引下标进行赋值
var arr=new Array(20);
var arr=new Array("terry","larry","boss");//在定义的同时赋值
2.字面量
var arr4=[100,200];//在定义的同时进行赋值
var arr5=[];
arr5[0]=100;arr5[1]=600;//通过索引下标进行赋值
2.数组的应用
1.数组类型的检测
1.typeOf(arr);//object
2.arr instanceof Array
3.Array.isArray(arr); //结果为true,判断arr是否是数组类型
//判断当前变量的数据类型
var arr=[];
console.log(typeof arr);//object
//小-->大 当前变量是某个构造函数对应的原型链上吗
console.log(arr instanceof Array);//true
console.log(arr instanceof String);//false
console.log(arr instanceof Object);//true
//大-->小 当前变量是否是我的子孙后代吗?
console.log(Array.prototype.isPrototypeOf(arr));// true
console.log(Number.prototype.isPrototypeOf(arr));// false
//数组中常用的,封装好的 静态函数:存在于某个构造函数内部公共的、共享的、大家都能使用的
console.log(Array.isArray(arr));//true
console.log(Array.isArray(new Array()));//true
console.log(Array.isArray('abc'));//false
console.log(Array.isArray(null));//false
2.数组的数据类型的转换
1.toString() 在默认情况下都会以逗号分隔字符串的形式返回数组项
2.join(); 使用指定的字符串用来分隔数组字符串 默认用,分割。应用于纯净的数据环境,可以指定连接符。
3.排序
1.reverse() 反转数组项的顺序:倒叙排序
但也会按照ASCII排序
2.sort():正叙排序
1.默认排序:该方法会调用每个数组项的toString() 方法,然后按照字符序列排序
ASCII码排序:eg.1,10,2,23
2.自定义排序:
a.该方法可以接受一个比较函数作为参数,比较函数有两个参数
b.如果第一个参数位于第二个参数之前,返回负数
c.如果第一个参数位于第二个参数之后,返回正数
例:冒泡排序 快速排序 插入排序
【注意】【字符串类型的数据项不能以算术操作符进行排序依据】
//自定义排序,定义两个数组
var arr1=[10,1,2,78,56,30];
var arr2=['hello','abc',100,200,'a','world'];
//实现arr1的升序
function numCompare(n1,n2){
return n1-n2;
}
arr1.sort(numCompare);
console.log(arr1);
arr2.sort(numCompare);
console.log(arr2);
//实现arr的降序
function numCp2(n1,n2){
return n2-n1;
}
arr1.sort(numCp2);
console.log(arr1);
//实现arr1的反序:索引位置
arr1.reverse(numCompare);
console.log(arr1);
//实现arr2的降序
function strcp(s1,s2){
if(s1>s2){return -1;}
else if(s1<s2){return 100;}
else{return 0;}
}
arr2.sort(strcp);
console.log(arr2);
//实现arr2的升序 利用匿名函数作为参数
arr2.sort(function(s1,s2){
if(s1>s2){return 100;}
else if(s1<s2){return -100;}
else {return 0;}
})
console.log(arr2);
4.队列栈
1.push() 在数组尾部添加一个数,并返回数组的长度
2.pop() 在数组尾部删除一个数,减少数组的length值,返回移除的项
3.shift() 在数组头部删除一个数,并且返回该项,同时将数组的长度减一。
4.unshift() 在数组头部添加一个数,并返回新数组的长度。
var arr=[];
arr.push(100,200);
arr.unshift('hello','world');
console.log(arr,arr.length);
console.log(arr.pop());//200
console.log(arr.shift());//hello
console.log(arr,arr.length);//world 100 2
5.截取方法
1.concat():拼接,返回值就是拼接后的数组,原数组不会受影响。
2.slice():截取数据项[start,end)=arr.slice(x,y);原数组不受影响。
3.splice():Array.prototype.splice(index_start,count);原数组会受影响,返回值就是删除掉的数据项
index_start是负数,就是倒序查找
splice(index_start,count,'','','');//替换或插入
6.索引方法
1.indexOf():从数组开头向后查找,使用全等操作符,找不到该元素返回-1。第一个参数为要查找的项,第二个参数(可选)为索引开始位置
2.lastIndexOf():从数组末尾向前查找,使用全等操作符,找不到该元素返回-1。第一个参数为要查找的项,第二个参数(可选)为索引开始位置
7.迭代方法
1.every():对数组中的每一运行给定的函数,如果该函数对每一项都返回true,则该函数返回true
2.some():对数组中的每一运行给定的函数,如果该函数对任一项都返回true,则返回true
3.filter():对数组中的每一运行给定的函数,会返回满足该函数的项组成的数组 不会对空数组进行检测
4.map():对数组中的每一运行给定的函数,返回每次函数调用的结果组成的数组 不会对空数组进行检测
5.forEach():对数组中的每一运行给定的函数,没有返回值,常用来遍历元素
var stus=[
{name:'zs',age:20},
{name:'ls',age:30},
{name:'ww',age:25},
{name:'nai',age:5}
];
//1.有没有成年人
var bool=stus.some(function(value){
return value.age>=18;
});
console.log(bool);
//2.有没有未成年
var bool=stus.some(function(value){
return value.age<18;
});
console.log(bool);
//3.是否都成年
var bool=stus.every(function(obj){
return obj.age>=18;
});
console.log(bool);
//4.把未成年人找出来
var arr1=stus.filter(function(obj){
return obj.age<18;
});
console.log(arr1);
//5.找到所有的用户名 obj.name
var arr1=stus.map(function(obj){
//return obj.name;
return 'work_'+obj.name;
});
console.log(arr1);
//6.找到所有的年龄 obj.age
var arr1=stus.map(function(obj){
return obj.age;
});
console.log(arr1);
//7.按照td格式输出打印
arr.forEach(function(value){
console.log('<td>'+value+'</td>');
});
二、正则表达式
1.正则表达式的作用
1.主要用于表单校验:手机号、短信验证码、密码,校验用户输入内容的格式是否符合我们的预期。
2. 还可以从比较长的一段字符中,提取想要的字符内容。
3.还可以替换文本内容。
2.正则表达式对象的创建
1.构造函数
修饰符只能是g i m,可以省略
var pattern=new RegExp("正则表达式内容","修饰符");
var pattern=new RegExp("abc","ig");
2.字面量
var pattern=/正则表达式/修饰符;
var pattern=/abc/img;
3.修饰符
1.i ignore case 忽略大小写 abc aBc Abc
2.m multiline 多行匹配 (\n:要有换行符才执行匹配) 如果目标字符串中没有\n的话 m修饰符毫无意义。
3.g globe 全词匹配 如果加了修饰符的话,在匹配时,会维护一个lastIndex的属性,用来记录当前匹配到这个字符串时的结束位置,下次匹配会从lastIndex开始。如果没有g修饰符lastIndex一直为0。
4.原型方法
1.exec(参数):从参数中获取目标字符串;参数:字符串;返回值:类数组对象
[数组,index,input,groups...]
var pattern=/abc/g; //正则表达式
var str="abcAb ac ab abcd we"; //要被匹配的字符串
console.log(pattern.exec(str));
console.log("lastIndex:"+pattern.lastIndex);//5 第一次匹配执行的位置
console.log(pattern.exec(str));
console.log("lastIndex:"+pattern.lastIndex);//15 第二次匹配执行的位置,从5开始
/abc/:只匹配abc或者它的其他大小写状态
/abc(d|e):匹配abcd或匹配abce
2.test(参数):用来检测一个字符串是否匹配某个模式
参数:str
返回值:boolean类型 true/false
3.toString()
参数:无
返回值:String
var pattern=/abc/i;
var pattern=new RegExp("abc","i");
console.log(pattern.toString());///abc/i
5.正则表达式的规则
1.字符类
. | 用来匹配任意单个字符,但是行结束符除外。 |
\d | 匹配任意的一个的阿拉伯数字 等价于[0-9] |
\D | 匹配任意的一个不是阿拉伯数字的字符 等价于[^0-9](取反) |
\w | 匹配任意字母、数字、下划线 等价于[A-Z a-z 0-9 _] |
\W | 匹配任意不是字母、数字、下划线 等价于[^A-Za-z0-9_] |
\s | 匹配空白符,包括空格、制表符、换行符、换页符和其他Unicode (\u00A0) |
\S | 匹配非空白符 |
\t | 水平制表符 |
\n | 换行符 |
\r | 回车符 |
\v | 垂直制表符 |
\f | 换页符 |
2.字符集合
[0-9]:表示该位置的字符的范围是0-9
[A-Z]:表示该位置的字符的范围是A-Z
[^A-Z]:表示该位置的字符的范围不是A-Z
[012]:表示该位置的字符的范围是0,1,2三个数
3.分组
(|): /abc(d|e):匹配abcd或匹配abce
6.原型属性
1.globe:布尔值,表明这个正则表达式是否带有修饰符g
2.ignoreCase:布尔值,表明这个正则表达式是否带有修饰符i
3.multiline:布尔值,表明这个正则表达式是否带有修饰符m
4.lastIndex:如果匹配模式带有g,这个属性存储在整个字符串中下一次检索的开始位置,这个属性会被exec(), test()方法调用到
5.source:包含正则表达式文本
例子:
var pattern=/abc/img;
console.log(pattern.global);
console.log(pattern.ignoreCase);
console.log(pattern.multiline);
console.log(pattern.lastIndex);
console.log(pattern.source);
7.String 对正则表达式的支持
1.match()
调用者:str
参数:正则表达式
返回值:数组(匹配成功结果组成的数组)
如果要实现全部找到结果,要注意正则表达式要开全局匹配g
//匹配abc. 用转义符\.
var pattern=/abc\./g;
var str="abc.d abc abc.c acb.c";
console.log(str.match(pattern));
2.search()
调用者:str
参数:正则表达式,如果参数不是正则表达式,会先使用RegExp将其转为构造函数
不支持全局检索g
返回值:
如果匹配成功,返回第一个成功的位置。
如果匹配不成功,返回-1。
3.replace()
调用者:str
参数:正则表达式,要替换的字符串
返回值:替换过后的string 不改变原来的字符串
//正则表达式在线测试
三、面向对象
1.String类型
类型 | 作用 | 调用者 | 参数 | 返回值 | 会不会改变原始值 |
length | 获取字符串的字符数量 | string | 无参数 | 字符串长度 | 不会 |
charAt(i) | 返回给定位置的字符 | string | 该字符的下标 | 字符 | 不会 |
charCodeAt(i) | 返回指定位置的字符ASCII码 | string | 该字符的下标 | 字符 | 不会 |
indexOf() | 从前往后查找指定字符所在位置 | string | 字符 | 该字符的下标 | 不会 |
lastIndexOf() | 从后往前查找 | string | 字符 | 该字符的下标 | 不会 |
concat() | 将一个或多个字符串进行拼接 | string1 | string2 | string1+string2 | 会 |
slice() | 截取字符串 | string | [开始下标位置,结束下标位置) | 截取的字符串 | 不会 |
substr() | 截取字符串 | string | (开始下标位置,截取字符长度) | 截取的字符串 | 不会 |
substring() | 截取字符串 | string | [start,end) | 截取的字符串 | 不会 |
trim() | 删除字符串前后空格 | string | 字符串 | 去掉前后空格的字符串 | 会 |
toLowerCase() | 将字符串转换为小写 | string | 字符串 | 字符串 | 会 |
roUpperCase() | 将字符串转换为大写 | string | 字符串 | 字符串 | 会 |
var str="hello";
console.log(str.length);
console.log(str.charAt(1));
console.log(str.charCodeAt(1));
console.log(str.indexOf("l"));
console.log(str.indexOf("l",3));
console.log(str.lastIndexOf("e"));
var str2=",world";
console.log(str.concat(str2));
var s="hello world";
//console.log(s.slice(3,7));//[)左闭右开
console.log(s.substr(3,5));
console.log(s.substring(3,7));
var s1=" hello world ! ! "
console.log(s1.trim());
console.log(s1.toUpperCase());
2.Math对象
(1)常用方法
Math.min() | 返回一组数中的最小值 |
Math.max() | 返回一组数中的最大值 |
Math.ceil() | 向上取舍 |
Math.floor() | 向下取舍 |
Math.round() | 四舍五入 |
Math.random() | 返回在(0,1)之间的一个随机数 |
console.log(Math.min(10,9,5,3,4,6));
console.log(Math.max(10,212,9,8,7));
console.log(Math.ceil(10.41));
console.log(Math.floor(10.41));
console.log(Math.round(10.41));
console.log(Math.round(10.91));
console.log(Math.random());
(2)其他方法
abs(num) | 绝对值 |
exp(num) | 返回Math.E的num次幂 |
log(num) | 返回num的自然对数 |
pow(num,power) | 返回num的power次幂 |
sqrt(num) | 返回平方根 |
scos(num) | 返回反cos |
asin(num) | 返回反sin |
atan(x) | 返回x的反正切值 |
atan2(y,x) | 返回y/x的反正切值 |
cos(x) | 返回x的余弦值 |
sin(x) | 返回x的正弦值 |
tan(x) | 返回x的正切值 |
3.Date对象
内置方法:var date=new Date()
Date.prototype.getFullYear() | 年份 |
Date.prototype.getMonth() | 返回月份【从0-11,所以在执行时要加1】 |
Date.prototype.getDate() | 返回日期对象中的几号 |
Date.prototype.getDay() | 返回星期几【注意:周日是0,从周日开始到周六】 |
Date.prototype.getHours() | 返回小时【从0到23】 |
Date.prototype.getMinutes() | 返回分钟数 |
Date.prototype.getSeconds() | 返回秒数 |
Date.prototype.getMilliseconds() | 返回毫秒 |
Date.prototype.getTime() | 将一个日期对象以毫秒形式返回【从1970年01月01日午夜到当前的毫秒数】 |
Date.prototype.valueOf() | 将一个Date对象转为毫秒的形式,否则不显示 |
Date.prototype.getYear() | 返回Date对象中的年份值减去1900 |
Date.prototype.toDateString() | 以字符串的形式返回一个Date的日期部分 |
Date.prototype.toTimeString() | 以字符串的形式返回一个Date的时间部分 |
Date.prototype.toISOString() | 将一个Date对象转换为ISO-8601格式的字符串,返回的字符串格式为yyyy-mm-ddThh:mm:ssZ |
Date.prototype.toJSON() | JSON序列化一个对象 |
Date.prototype.toLocaleDateString() | 以本地格式的字符串返回一个Date的日期部分,返回一个本地人可读的日期格式,日期部分 |
Date.prototype.toLocaleString() | 将一个Date转化难为一个本地格式的字符串 |
例子:
var date= new Date();
console.log(date);
console.log(date.getFullYear());
console.log(date.getDate());
console.log(date.getDay());
console.log(date.getHours());
console.log(date.getMinutes());
console.log(date.getSeconds());
console.log(date.getMilliseconds());
console.log(date.getMonth()+1);
console.log(date.getTime());
console.log(date.getYear());
console.log(date.toDateString());
console.log(date.valueOf());
console.log(date.toTimeString());
console.log(date.toISOString());
console.log(date.toJSON());
console.log(date.toLocaleString());
console.log(date.toLocaleDateString());
//写出2021-09-02 19:22:45这样形式的日期
function dateFMT(date){
var y=date.getFullYear();
//数字之前0的判断,第一种方法
var m=date.getMonth()+1<10?"0"+(date.getMonth()+1):date.getMonth()+1;
//数字之前0的判断,第二张方法
var d=date.getDate().toString().padStart(2,"0");
var hh=date.getHours()<10?"0"+date.getHours():date.getHours();
var mm=date.getMinutes()<10?"0"+date.getMinutes():date.getMinutes();
var ss=date.getSeconds()<10?"0"+date.getSeconds():date.getSeconds();
return y+"-"+m+"-"+d+" "+hh+":"+mm+":"+ss;
}
console.log(dateFMT(new Date()));