Array类型
检测Array数组
使用instanceof能够检测数组,但是父页面使用instanceof检测子页面中的数组时会出现错误,反之亦然,因为此时页面存在两个框架,也就有了两个不同的Array构造函数。
使用isArray()方法检测数组
var arr = [1,2,3]
if(Array.isArray(arr)){
alert(arr)
}
join()方法
join()方法是在数组使用toLocaleString(),toString()和valueOf()方法时,修改分隔符号,修改的只是显示的字符串,实际数组并没有发生改变。
var arr = [1,2,3];
alert(arr.join("|").toString()) //结果:1|2|3
alert(arr.toString()); //结果:1,2,3
栈操作push()与pop()
var arr = [1,2,3];
alert("arr:"+arr); //结果:arr:1,2,3
var count = arr.push(4);
alert("arr:"+arr+"\t count:"+count); //结果:arr:1,2,3,4 count:4
count = arr.push(9,8);
alert("arr:"+arr+"\t count:"+count); //结果:arr:1,2,3,4,9,8 count:6
var item = arr.pop();
alert("arr:"+arr+"\t item:"+item); //结果:arr:1,2,3,4,9 item:8
**push(): **把数组作为栈,推入操作,返回数组长度。
**pop(): **把数组作为栈,移除操作,返回移除的项。
两者连用能实现栈先进后出的特性。
队列操作push()与shift()
**shift(): **移除数组第一项并返回该值。
与push()连用能实现队列先进先出的特性。
unshift():在数组前段添加值,并返回数组长度。
与pop()连用实现反向的队列。
重排序方法sort()
默认升序,但却调用每一项的toString()方法,然后再对字符串进行比较。
var values = [0,1,5,10,15];
values.sort();
alert(values) //结果:0,1,10,15,5
结果很明显不符合预期。
使用比较函数辅助sort()排序
var values = [0,1,5,10,15];
values.sort();
alert(values) //结果:0,1,10,15,5
//自定义比较函数
function compare(value1,value2){
if(value1<value2){
return -1
}else if(value1>value2){
return 1
}else{
return 0
}
}
values.sort(compare);
alert(values); //结果:0,1,10,15,5
比较函数有两个参数,如果第一个参数需要在第二个参数前面则返回负数,需要在前面则返回整数,不变则返回0。
reverse():将数组反向。
连接数组concat()
concat()函数可以连接两个数组,但是返回的是一个连接了两个数组的新数组,原数组不变。
var values = ['H','E','L','L','O'];
var values2 = [' ','W','O','R','L','D'];
alert(values.concat(values2,'!').join("")); //结果:HELLO WORLD!
alert(values.join("")); //结果:HELLO
alert(values2.join("")); //结果:WORLD
同时也能将字符串push到数组中。
截取数组slice()
slice()接收开始序号和结束序号来截取数组,只有开始序号则截取到数组末尾。
splice()
实现删除:splice(0,2)从下标0个开始删除2个数组元素。
var values = ['H','E','L','L','O'];
values.splice(0,2);
alert(values) //结果:L,L,O
实现替换:splice(3,2,“P”)从下标为3个开始删除2个数组元素,并替换为"P"
var values = ['H','E','L','L','O'];
values.splice(3,2,"P");
alert(values) //结果:H,E,L,P
实现插入:splice(0,2,“A”),这里就暂不举例了。
位置方法indexOf()与lastIndexOf()
indexOf(“L”):从开头往后查找第一个"L"元素在数组中的下标,没有找到则返回-1
var values = ['H','E','L','L','O'];
alert(values.indexOf("L")) //结果:返回2
indexOf(“L”,3):从第三个位置开始往后查找第一个"L"元素在数组中的下标,没有找到则返回-1
var values = ['H','E','L','L','O'];
alert(values.indexOf("L",3)) //结果:返回3
lastIndexOf:与indexOf一致,但查找方式为从最后一个元素往前查找。
迭代方法
方法名 | 说明 |
---|---|
every() | 对数组的每一项运行给定的函数,如果该函数对每一项都返回true则返回true |
some() | 对数组的每一项运行给定的函数,如果该函数对r任意一项返回true则返回true |
filter() | 对数组的每一项运行给定的函数,返回该函数会放回true的项组成的数组 |
map() | 对数组的每一项运行给定的函数,返回每次函数调用的结果所组成的数组 |
forEach() | 对数组的每一项运行给定的函数,没有返回值 |
归并方法reduce()与reduceRight()
var values = [1,3,5,8,1,5,4]
var sum = values.reduce(function(prev,cur,index,array){
return prev+cur;
},3)
alert(sum); //结果:返回30
reduce接收两个参数,第一个为归并函数,第二个为初始值(初始值可以为空)。归并函数有4个参数分别是:
prev:前一个值
cur:当前值
index:当前值的下标
array:数组对象
如果没有初始值则从第二项开始迭代,此时前一个值为第一个值,并且这个函数返回的值会作为第三项中的前一个值(prev)。
Date类型
构造方法
var date = new Date()
alert(date); //结果:Sun Mar 17 2019 13:53:15 GMT+0800 (中国标准时间)
不带参数返回当前系统时间。
var date = new Date("May 25 2016")
alert(date); //结果:Wed May 25 2016 00:00:00 GMT+0800 (中国标准时间)
var date2 = new Date(Date.parse("May 25 2016"))
alert(date2); //结果:Wed May 25 2016 00:00:00 GMT+0800 (中国标准时间)
根据字符串创建日期对象,构造函数new Date(“May 25 2016”)实际在后台也会调用Date.parse(“May 25 2016”)方法来实现。
var date = new Date(2019,2,30,3,30,33)
alert(date); //结果:Sat Mar 30 2019 03:30:33 GMT+0800 (中国标准时间)
alert(+date); //结果:1553887833000
var date2 = new Date(Date.UTC(2019,2,30,3,30,33))
alert(date2); //结果:Sat Mar 30 2019 11:30:33 GMT+0800 (中国标准时间)
当构造函数第一个参数为数字时,函数会假设为年,第二个为月,第三个为日,以此类推。
月份从0开始最大值为11
构造函数使用的是当前的本地时区创建,而Date.UTC使用的是GMT时区创建,所以两者创建的时间会有所不同。
另外,使用+操作符可以获得Date对象的时间戳。
日期格式化方法
var date = new Date()
alert(date.toDateString()); //结果:Sun Mar 17 2019
alert(date.toTimeString()); //结果:14:11:58 GMT+0800 (中国标准时间)
alert(date.toLocaleDateString()); //结果:2019/3/17
alert(date.toLocaleTimeString()); //结果:下午2:12:19
alert(date.toUTCString()); //结果:Sun, 17 Mar 2019 06:12:19 GMT
虽然感觉是几个没啥软用的方法,但还是写下来把。
RegExp类型
创建方法
var expression = /pattern/flags
pattern为正则表达式部分。
flags为标志部分,每一个正则表达式都可以有多个标志。
flags有以下3个标志。
标志名称 | 说明 |
---|---|
g | 表示全局模式(globel),即将模式应用于整个字符串,而非在发现第一个匹配项时立即返回停止 |
i | 表示不区分大小写模式(case-insensitive) |
m | 表示多行模式(multiline),即在到达一行文本末尾时还会继续找找下一行中是否存在与模式匹配的项 |
var value = "HELLO";
var expression = /l/;
alert(expression.test(value)); //结果:false
alert(expression.exec(value)); //结果:null
var expression2 = /l/i;
alert(expression2.test(value)); //结果:true
alert(expression2.exec(value)); //结果:L
alert((expression2.exec(value)).index); //结果:2
var expression3 = /l/gi;
alert(expression3.test(value)); //结果:true
alert(expression3.exec(value)); //结果:L
alert((expression3.exec(value)).index); //结果:3