数组、字符串、Date

220 阅读10分钟

数组

创建数组

  • 用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毫秒