数组
创建数组
- 用Array构造函数
var arr = new Array();
var arr = new Array(10);//length为10的数组
var arr = Array();
- 数组字面量表示法
var arr = []
检测数组
Array.isArray(obj)
检测某个值到底是不是数组
var arr = [];
console.log(Array.isArray(arr));//true
var arr1 = new Date();
console.log(Array.isArray(arr1));//false
增删数组元素
- 通过改变length的值,可以对数组的末尾添加或移除。
var arr = [1,2,3,4];
arr.length = 3;
console.log(arr); // [1,2,3]
arr.length = 4;
console.log(arr); // [1, 2, 3, undefined]
arr[3] = 5;
console.log(arr); //[1,2,3,5]
以下四种方法原数组都会发生改变
push()
可将任意数量的参数添加到末尾,并返回数组长度。
var arr = [1,2,3,4];
console.log(arr.push(7));// 5 数组长度为5
console.log(arr);//[1,2,3,4,5]
pop()
从数组末尾移除一项,减少length值,并返回移除的项。
var arr = [1,2,3,4];
console.log(arr.pop());//4 移除了4
console.log(arr);//[1,2,3]
push()和pop()是栈方法
unshift()
可将任意数量的参数添加到开头,并返回数组长度。
var arr = [1,2,3,4];
console.log(arr.unshift(7));//5 长度
console.log(arr);//[7,1,2,3,4]
shift()
从数组开头移除一项,减少length值,并返回移除的项。
var arr = [1,2,3,4];
console.log(arr.shift());//1
console.log(arr);//[2,3,4]
unshift和shift是队列方法
转换方法
join()
使用不同分隔符将数组转化成字符串
var arr = [1,2,3,4];
console.log(arr.join('-'));//"1-2-3-4"
操作方法
注意:
- concat()、slice()不会影响原始数组
- splice()、reverse()、sort()影响原始数组
concat()
创建一个新数组,将接收到的参数添加到新数组的末尾
var arr1 = [1,2,3]
var arr2 = [4,5,6]
var arr3 = arr1.concat(7,[8,9]);
console.log(arr3);// [1, 2, 3, 7, 8, 9]
var arr4 = arr1.concat(arr2);
console.log(arr4);// [1, 2, 3, 4, 5, 6]
var arr5 = arr1.concat();
console.log(arr5); //[1, 2, 3] 这是一个新数组
slice()
基于当前数组中的一个或多个项创建新数组。
- 一个参数:从参数指定位置开始到当前数组末尾的所有项。
- 两个参数:起始位置到结束位置,但不包括结束位置的所有项
- 可以有负数:数组长度加上该数来确定相应的位置。
var arr1 = [1,2,3,4,5,6];
var arr2 = arr1.slice(2);
console.log(arr2);// [3, 4, 5, 6]
var arr3 = arr1.slice(1,4);
console.log(arr3);// [2, 3, 4]
var arr4 = arr1.slice(-2);
console.log(arr4); // [5, 6] -2+6=4,从下标为4的项5开始
splice()
用途:删除,插入,替换
- 删除:两个参数,要删除的第一项位置和要删除的项数
- 插入:三个参数,起始位置、要删除的项数、插入的项
- 替换:三个参数,起始位置,删除的项数,插入的项(先删除在插入即替换)
splice返回一个数组,包含被删除的项
var arr1 = [1,2,3,4,5,6];
var arr2 = arr1.splice(0,1);
console.log(arr1);//[2, 3, 4, 5, 6]
console.log(arr2);[1]
var arr3 = arr1.splice(1,0,'red','green');
console.log(arr1);//[2, "red", "green", 3, 4, 5, 6]
console.log(arr3);//[]
var arr4 = arr1.splice(1,3,'yellow','black');
console.log(arr1);//[2, "yellow", "black", 4, 5, 6]
console.log(arr4);//["red", "green", 3]
位置方法
indexOf()
从数组的开头开始向后查找
两个参数:要查找的项、查找的起点、 没找到要查的项则返回-1
var arr1 = [3,4,7,8,0,9,4];
console.log(arr1.indexOf(4)); //1
console.log(arr1.indexOf(5));//-1
console.log(arr1.indexOf(4,3));//6 从下标为3的位置开始查找数字4
lastIndexOf()
从数组的末尾开始向前查找
var arr1 = [3,4,7,8,0,9,4];
console.log(arr1.lastIndexOf(0));//4
console.log(arr1.lastIndexOf(5));//-1
console.log(arr1.lastIndexOf(4));// 6
重排序方法
reverse()
反转数组的顺序
var arr = [1,2,3,4];
console.log(arr.reverse());//[4,3,2,1]
sort
按升序排列数组项,最小的值在最前面,通过toString()比较字符串Unicode 。
var arr = [77,26,52,98,11];
console.log(arr.sort());//[11, 26, 52, 77, 98]
var arr = ['banana','hello','apple','pear'];
console.log(arr.sort());//["apple", "banana", "hello", "pear"]
var arr = [0,10,1,5,15];
console.log(arr.sort());//[0, 1, 10, 15, 5],进行字符串比较时'10'位于‘5’前面
比较字符串可能改变数组的顺序,可以接一个比较函数。
function compare(value1,value2){
if(value1 < value2){
return -1;
}else if(value1 > value2) {
return 1;
}else {
return 0;
}
}
var arr = [0,10,1,5,15];
console.log(arr.sort(compare));//[0, 1, 5, 10, 15]
//sort()得到的参数为正数时才交换两个值的顺序,否则不交换
或者更简单的
function compare(value1,value2){
return value1 - value2;
}
var arr = [0,10,1,5,15];
console.log(arr.sort(compare));//[0, 1, 5, 10, 15]
迭代方法
forEach(element,index,array)
遍历数组,参数为一个回调函数。 本质与for循环迭代数组一样。
回调函数有三个参数:
- 当前元素
- 当前元素索引值
- 整个数组
var arr = [1,2,3,4,5];
for(var i = 0; i < arr.length;i++){
console.log(arr[i]);
} // 1 2 3 4 5
arr.forEach(function(e){
console.log(e);
})// 1 2 3 4 5
every(element, index, array)
查询数组中的项是否满足某个条件,全true即true。
var arr = [1,2,3,4,5,6];
var everyResult = arr.every(function(a){
return a > 5;
});
console.log(everyResult);// false
some(element, index, array)
查询数组中的项是否满足某个条件,一true即true。
var arr = [1,2,3,4,5,6];
var someResult = arr.some(function(a){
return a > 5;
});
console.log(someResult);//true
map()
遍历数组返回经过函数执行的结果。
var arr = [1,2,3,4,5,6];
var mapResult = arr.map(function(a){
return a * 2;
});
console.log(mapResult);//[2, 4, 6, 8, 10, 12]
fliter()
通过函数判断返回数组中满足要求的项。
var arr = [1,2,3,4,5,6];
var filterResult = arr.filter(function(a){
return a > 3;
});
console.log(filterResult);//[4,5,6]
归并方法
reduce()
从数组第一项迭代数组所有项最终返回一个值。
var arr = [1,2,3,4,5];
var sum = arr.reduce(function(x,y){
return x + y;
});
console.log(sum);//15
reduceRight()
从数组最后一项迭代数组所有项最终返回一个值。
字符串
多行字符串
- 如果长字符串必须分成多行,可以在每一行的尾部使用反斜杠。反斜杠的后面必须是换行符。
var str = 'long \
long \
long';
console.log(str);//"long long long"
上面代码表示,加了反斜杠以后,原来写在一行的字符串,可以分成多行,效果与写在同一行完全一样。
- 连接运算符(+)可以连接多个单行字符串,用来模拟多行字符串。
var str = 'long '
+ 'long '
+ 'long '
+ 'string ';
console.log(str);//"long long long string "
- ES6扩展
var str = `
hello
world
`
console.log(str);
//
"
hello
world
"
常见字符串方法
1、转换为字符串
toString()
null和undefined没有这个方法
var a = 1234;
a;//1234
a.toString();//"1234"
可以传递一个参数:输出数值的基数。
var num = 10;
num.toString(2);//"1010"
num.toString(8);//"12"
num.toString(10);//"10"
num.toString(16);//"a"
String()
可以转换null或undefined。
var a = null;
String(a);//"null"
var b;
String(b);//"undefined"
2、字符方法
var str = 'hello world';
console.log(str.length);//11
console.log(str[0]);//h 第一个字符
console.log(str[str.length-1]);//d 最后一个字符
charAt()
以单字符字符串的形式返回给定位置的那个字符
var str = 'hello world';
console.log(str.charAt(0));//h 第一个字符
charCodeAt()
以单字符字符串的形式返回给定位置的那个字符编码
var str = 'hello world';
console.log(str.charCodeAt(0));//104
3、连接
+号
var a = 'hello ';
var b = 'world!';
var c = a + b;
console.log(c); // hello world!
concat()
用于将一个或多个字符串拼接得到的新字符串。
var a = "hello ";
var b = a.concat('world','!');
console.log(b);// hello world!
4、创建新字符串
以下四种方法原字符串不变
slice()
包含一个或两个参数,第一个参数是开始位置,第二个参数是结束位置。
允许负参,负值与字符串长度相加。
var str = 'hello world';
console.log(str.slice(1,3));//el
console.log(str.slice(3));//lo world
console.log(str.slice(-5,-1));//worl
split()(字符串转化为数组)
使用指定的分隔符字符串将一个String对象分割成子字符串数组,以一个指定的分割字串来决定每个拆分的位置。
var str = 'The quick brown fox jumps over the lazy dog.';
var words = str.split(' ');
console.log(words[3]);//fox
substring()
包含一个或两个参数,第一个参数是开始位置,第二个参数是结束位置。
会将所有的负值参数转换为0。
var str = 'hello world';
console.log(str.substring(1,3));//el
console.log(str.substring(-4));//hello world
console.log(str.substring(3,-4));//hel
substr()
包含一个或两个参数,第一个参数是开始位置,第二个参数是返回的字符个数。
允许负参,第一个负值参数加上字符串长度。第二个负值参数转换为0即返回包含0个字符的字符串。
console.log(str.substr(1,3))//ell
console.log(str.substr(-4));//orld
console.log(str.substr(3,-4));//(空字符串)
5、字符串位置方法
indexOf()
从字符串的开头向后搜索子字符串
var str = 'hello world';
str.indexOf('l');// 2
str.indexOf('l',6);// 9
lastIndexOf()
从字符串的末尾向前搜索子字符串。会从指定位置向前搜索。
var str = 'hello world';
str.lastIndexOf('l');// 9
str.lastIndexOf('l',6);//3
6、查找
search()
从头开始查找返回字符串中第一个匹配的索引。没有找到匹配项则返回-
var str = 'hello world';
console.log(str.search('ll'))// 2 找不到为-1
replace()
var str = 'hello world';
console.log(str.replace('ll','hh'))//hehho world
match
在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
var str = 'hello world';
console.log(str.match('ll'))//返回匹配的数组
7、大小写
.toUpperCase()
var str = 'hello world';
console.log(str.toUpperCase())//HELLO WORLD
.toLowerCase()
var str = 'hello world';
console.log(str.toLowerCase())//hello world
Math
Math.PI //3.1415926
round
四舍五入
Math.round(0.5)// 1
Math.round(-1.5)//-1
Math.round(-1.6)//-2
abs
参数绝对值
Math.abs(-1)//1
max min
Math.max(2,-1,5) //5
Math.min(2,-1,5)//-1
floor
小于或等于参数值的最大整数
Math.floor(-3.6)//-4
Math.floor(3.6)//3
ceil
大于或等于参数值的最小整数
Math.ceil(3.6)//4
Math.ceil(-3.6)//-3
pow
第一个参数为底数、第二个参数为幂的指数值
Math.pow(2,3)//8
sqrt
返回参数值的平方根。如果参数是一个负值,则返回NaN。
Math.sqrt(9,2)//3
log
以e为底的自然对数值
Math.log(Math.E)//1
Math.log(100)/Math.LN10//2
exp
exp方法返回常数e的参数次方
Math.exp(1)//2.718281828459045
Math.exp(2)//7.38905609893065
random
该方法返回0到1之间的一个伪随机数,可能等于0,但是一定小于1
Math.random()//0-1的随机数
给定范围内的随机数
function getRandomArbitrary(min, max) {
return Math.random() * (max - min) + min;
}
getRandomArbitrary(5,11)
给定范围内的随机整数
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
getRandomInt(5,11)
三角函数
sin cos tan asin acos atan
Date
Date.now()
当前距离1970年1月1日00:00:00的毫秒数
Date.now()//1561184303265
Date.parse()
parse方法用来解析日期字符串,返回距离1970年1月1日 00:00:00的毫秒数。日期字符串的格式应该完全或者部分符合YYYY-MM-DDTHH:mm:ss.sssZ格式,Z表示时区,是可选的。 如果解析失败,返回NaN
Date.parse('2019-10-1')//1569859200000
new Date()
var d = new Date()
d.getTime() //返回实例对象距离1970年1月1日00:00:00对应的毫秒数
d.getDate() //返回实例对象对应每个月的几号(从1开始)
d.getDay() //返回星期,星期日为0,星期一为1,以此类推
d.getFullYear() //返回四位的年份
d.getMonth() //返回月份(0表示1月,11表示12月)
d.getHours() //返回小时(0~23)
d.getMilliseconds() //返回毫秒(0-999)
d.getMinutes() //返回分钟(0-59)
d.getSeconds() //返回秒(0-59)
Date运算
var curTime = Date.now();
console.log(curTime-100*24*60*60*1000);
//距离100天之前有xxxx毫秒