数组,字符串,date,math 常见的属性和方法 定时器


js数组方法大全

JavaScript中创建数组有两种方式

(一)使用 Array 构造函数:


var arr1 = new Array(); //创建一个空数组

var arr2 = new Array(20); // 创建一个包含20项的数组

var arr3 = new Array("lily","lucy","Tom"); // 创建一个包含3个字符串的数组


(二)使用数组字面量表示法:


var arr4 = []; //创建一个空数组

var arr5 = [20]; // 创建一个包含1项的数组

var arr6 = ["lily","lucy","Tom"]; // 创建一个包含3个字符串的数组


数组的方法有数组原型方法,也有从object对象继承来的方法,这里我们只介绍数组的原型方法,数组原型方法主要有以下这些:

join()

push()和pop()

shift() 和 unshift()

sort()

reverse()

concat()

slice()

splice()

indexOf()和 lastIndexOf() (ES5新增)

forEach() (ES5新增)

map() (ES5新增)

filter() (ES5新增)

every() (ES5新增)

some() (ES5新增)

reduce()和 reduceRight() (ES5新增)

下面详细介绍一下各个方法的基本功能。

1、join()

join(separator): 将数组的元素组起一个字符串,以separator为分隔符,省略的话则用默认用逗号为分隔符,该方法只接收一个参数:即分隔符。


var arr = [1,2,3];

console.log(arr.join()); // 1,2,3

console.log(arr.join("-")); // 1-2-3

console.log(arr); // [1, 2, 3](原数组不变)

通过join()方法可以实现重复字符串,只需传入字符串以及重复的次数,就能返回重复后的字符串,函数如下:


function repeatString(str, n) {

return new Array(n + 1).join(str);

}

console.log(repeatString("abc", 3)); // abcabcabc

console.log(repeatString("Hi", 5)); // HiHiHiHiHi

2、push()和pop()

push(): 可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度。

pop():数组末尾移除最后一项,减少数组的 length 值,然后返回移除的项。


var arr = ["Lily","lucy","Tom"];

var count = arr.push("Jack","Sean");

console.log(count); // 5

console.log(arr); // ["Lily", "lucy", "Tom", "Jack", "Sean"]

var item = arr.pop();

console.log(item); // Sean

console.log(arr); // ["Lily", "lucy", "Tom", "Jack"]

3、shift() 和 unshift()

shift():删除原数组第一项,并返回删除元素的值;如果数组为空则返回undefined 。

unshift:将参数添加到原数组开头,并返回数组的长度 。

这组方法和上面的push()和pop()方法正好对应,一个是操作数组的开头,一个是操作数组的结尾。


var arr = ["Lily","lucy","Tom"];

var count = arr.unshift("Jack","Sean");

console.log(count); // 5

console.log(arr); //["Jack", "Sean", "Lily", "lucy", "Tom"]

var item = arr.shift();

console.log(item); // Jack

console.log(arr); // ["Sean", "Lily", "lucy", "Tom"]

4、sort()

sort():按升序排列数组项——即最小的值位于最前面,最大的值排在最后面。

在排序时,sort()方法会调用每个数组项的 toString()转型方法,然后比较得到的字符串,以确定如何排序。即使数组中的每一项都是数值, sort()方法比较的也是字符串,因此会出现以下的这种情况:


var arr1 = ["a", "d", "c", "b"];

console.log(arr1.sort()); // ["a", "b", "c", "d"]

arr2 = [13, 24, 51, 3];

console.log(arr2.sort()); // [13, 24, 3, 51]

console.log(arr2); // [13, 24, 3, 51](元数组被改变)

为了解决上述问题,sort()方法可以接收一个比较函数作为参数,以便我们指定哪个值位于哪个值的前面。比较函数接收两个参数,如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等则返回 0,如果第一个参数应该位于第二个之后则返回一个正数。以下就是一个简单的比较函数:


function compare(value1, value2) {

if (value1 < value2) {

return -1;

} else if (value1 > value2) {

return 1;

} else {

return 0;

}

}

arr2 = [13, 24, 51, 3];

console.log(arr2.sort(compare)); // [3, 13, 24, 51]

如果需要通过比较函数产生降序排序的结果,只要交换比较函数返回的值即可:


function compare(value1, value2) {

if (value1 < value2) {

return 1;

} else if (value1 > value2) {

return -1;

} else {

return 0;

}

}

arr2 = [13, 24, 51, 3];

console.log(arr2.sort(compare)); // [51, 24, 13, 3]

5、reverse()

reverse():反转数组项的顺序。


var arr = [13, 24, 51, 3];

console.log(arr.reverse()); //[3, 51, 24, 13]

console.log(arr); //[3, 51, 24, 13](原数组改变)

6、concat()

concat() :将参数添加到原数组中。这个方法会先创建当前数组一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组。在没有给 concat()方法传递参数的情况下,它只是复制当前数组并返回副本。


var arr = [1,3,5,7];

var arrCopy = arr.concat(9,[11,13]);

console.log(arrCopy); //[1, 3, 5, 7, 9, 11, 13]

console.log(arr); // [1, 3, 5, 7](原数组未被修改)

从上面测试结果可以发现:传入的不是数组,则直接把参数添加到数组后面,如果传入的是数组,则将数组中的各个项添加到数组中。但是如果传入的是一个二维数组呢?


var arrCopy2 = arr.concat([9,[11,13]]);

console.log(arrCopy2); //[1, 3, 5, 7, 9, Array[2]]

console.log(arrCopy2[5]); //[11, 13]

上述代码中,arrCopy2数组的第五项是一个包含两项的数组,也就是说concat方法只能将传入数组中的每一项添加到数组中,如果传入数组中有些项是数组,那么也会把这一数组项当作一项添加到arrCopy2中。

7、slice()

slice():返回从原数组中指定开始下标到结束下标之间的项组成的新数组。slice()方法可以接受一或两个参数,即要返回项的起始和结束位置。在只有一个参数的情况下, slice()方法返回从该参数指定位置开始到当前数组末尾的所有项。如果有两个参数,该方法返回起始和结束位置之间的项——但不包括结束位置的项。


var arr = [1,3,5,7,9,11];

var arrCopy = arr.slice(1);

var arrCopy2 = arr.slice(1,4);

var arrCopy3 = arr.slice(1,-2);

var arrCopy4 = arr.slice(-4,-1);

console.log(arr); //[1, 3, 5, 7, 9, 11](原数组没变)

console.log(arrCopy); //[3, 5, 7, 9, 11]

console.log(arrCopy2); //[3, 5, 7]

console.log(arrCopy3); //[3, 5, 7]

console.log(arrCopy4); //[5, 7, 9]

arrCopy只设置了一个参数,也就是起始下标为1,所以返回的数组为下标1(包括下标1)开始到数组最后。

arrCopy2设置了两个参数,返回起始下标(包括1)开始到终止下标(不包括4)的子数组。

arrCopy3设置了两个参数,终止下标为负数,当出现负数时,将负数加上数组长度的值(6)来替换该位置的数,因此就是从1开始到4(不包括)的子数组。

arrCopy4中两个参数都是负数,所以都加上数组长度6转换成正数,因此相当于slice(2,5)。

8、splice()

splice():很强大的数组方法,它有很多种用法,可以实现删除、插入和替换。

删除:可以删除任意数量的项,只需指定 2 个参数:要删除的第一项的位置和要删除的项数。例如, splice(0,2)会删除数组中的前两项。

插入:可以向指定位置插入任意数量的项,只需提供 3 个参数:起始位置、 0(要删除的项数)和要插入的项。例如,splice(2,0,4,6)会从当前数组的位置 2 开始插入4和6。

替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定 3 个参数:起始位置、要删除的项数和要插入的任意数量的项。插入的项数不必与删除的项数相等。例如,splice (2,1,4,6)会删除当前数组位置 2 的项,然后再从位置 2 开始插入4和6。

splice()方法始终都会返回一个数组,该数组中包含从原始数组中删除的项,如果没有删除任何项,则返回一个空数组。


var arr = [1,3,5,7,9,11];

var arrRemoved = arr.splice(0,2);

console.log(arr); //[5, 7, 9, 11]

console.log(arrRemoved); //[1, 3]

var arrRemoved2 = arr.splice(2,0,4,6);

console.log(arr); // [5, 7, 4, 6, 9, 11]

console.log(arrRemoved2); // []

var arrRemoved3 = arr.splice(1,1,2,4);

console.log(arr); // [5, 2, 4, 4, 6, 9, 11]

console.log(arrRemoved3); //[7]

9、indexOf()和 lastIndexOf()

indexOf():接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。其中, 从数组的开头(位置 0)开始向后查找。

lastIndexOf:接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。其中, 从数组的末尾开始向前查找。

这两个方法都返回要查找的项在数组中的位置,或者在没找到的情况下返回1。在比较第一个参数与数组中的每一项时,会使用全等操作符。


var arr = [1,3,5,7,7,5,3,1];

console.log(arr.indexOf(5)); //2

console.log(arr.lastIndexOf(5)); //5

console.log(arr.indexOf(5,2)); //2

console.log(arr.lastIndexOf(5,4)); //2

console.log(arr.indexOf("5")); //-1

10、forEach()

forEach():对数组进行遍历循环,对数组中的每一项运行给定函数。这个方法没有返回值。参数都是function类型,默认有传参,参数分别为:遍历的数组内容;第对应的数组索引,数组本身。


var arr = [1, 2, 3, 4, 5];

arr.forEach(function(x, index, a){

console.log(x + '|' + index + '|' + (a === arr));

});

// 输出为:

// 1|0|true

// 2|1|true

// 3|2|true

// 4|3|true

// 5|4|true

11、map()

map():指“映射”,对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。

下面代码利用map方法实现数组中每个数求平方。


var arr = [1, 2, 3, 4, 5];

var arr2 = arr.map(function(item){

return item*item;

});

console.log(arr2); //[1, 4, 9, 16, 25]

12、filter()

filter():“过滤”功能,数组中的每一项运行给定函数,返回满足过滤条件组成的数组。


var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

var arr2 = arr.filter(function(x, index) {

return index % 3 === 0 || x >= 8;

});

console.log(arr2); //[1, 4, 7, 8, 9, 10]

13、every()

every():判断数组中每一项都是否满足条件,只有所有项都满足条件,才会返回true。


var arr = [1, 2, 3, 4, 5];

var arr2 = arr.every(function(x) {

return x < 10;

});

console.log(arr2); //true

var arr3 = arr.every(function(x) {

return x < 3;

});

console.log(arr3); // false

14、some()

some():判断数组中是否存在满足条件的项,只要有一项满足条件,就会返回true。


var arr = [1, 2, 3, 4, 5];

var arr2 = arr.some(function(x) {

return x < 3;

});

console.log(arr2); //true

var arr3 = arr.some(function(x) {

return x < 1;

});

console.log(arr3); // false

15、reduce()和 reduceRight()

这两个方法都会实现迭代数组的所有项,然后构建一个最终返回的值。reduce()方法从数组的第一项开始,逐个遍历到最后。而 reduceRight()则从数组的最后一项开始,向前遍历到第一项。

这两个方法都接收两个参数:一个在每一项上调用的函数和(可选的)作为归并基础的初始值。

传给 reduce()和 reduceRight()的函数接收 4 个参数:前一个值、当前值、项的索引和数组对象。这个函数返回的任何值都会作为第一个参数自动传给下一项。第一次迭代发生在数组的第二项上,因此第一个参数是数组的第一项,第二个参数就是数组的第二项。

下面代码用reduce()实现数组求和,数组一开始加了一个初始值10。


var values = [1,2,3,4,5];

var sum = values.reduceRight(function(prev, cur, index, array){

return prev + cur;

},10);

console.log(sum); //25

JS字符串常用方法总结

动态方法:1、str.charAt(index); 返回子字符串,index为字符串下标,index取值范围[0,str.length-1]

动态方法:2、str.charCodeAt(index); 返回子字符串的unicode编码,index取值范围同上

静态方法:3、String.fromCharCode(num1,num2,...,numN); 根据unicode编码返回字符串

varstr = $("input").val();

if(detectNum(str))

{

  alert("是数字");

}function detectNum(str1)

{

  varn = 0;

  for(vari=0;i

  {

    n=str1.charCodeAt(i);

    if(n<48 || n>57)

    {

      returnfalse;

    }

  }

  returntrue;

}


4、str.indexOf(searchString,startIndex);  返回子字符串第一次出现的位置,从startIndex开始查找,找不到时返回-1

5、str.lastIndexOf(searchString,startIndex);  从由往左找子字符串,找不到时返回-1

由于以上两个方法只能返回1次,当需要将一段字符串里的所有searchString出现的位置都查找出来时,这样做:

varstr = "........";vars = "妙味";vari = 0;for( ; str.indexOf(s,i) != -1; )

{  console.log(str.indexOf(s,i));  i

= str.indexOf(s,i) + s.length;

}


6、字符串之间的比较:比较第一个字符的unicode编码值,第一个字符要是相同,就比较第二个,依次往下

  '10000' < '2'   1的unicode值比2的unicode值小  true

  '10000' > 2    转成数字比较  true


7、截取字符串

str.substring(start,end);  两个参数都为正数,返回值:[start,end) 也就是说返回从start到end-1的字符

str.slice(start,end);  两个参数可正可负,负值代表从右截取,返回值:[start,end) 也就是说返回从start到end-1的字符

  不建议用:str.substr(start,length);  start参数可正可负,负数代表从右截取

  除了 slice() 和 substr() 方法里的负值是代表从右截取,其他方法里的负值一律作为0处理


  【引申】:截取数组

  arr.slice(start,end);  两个参数可正可负,负值代表从右截取,返回值:[start,end) 也就是说返回从start到end-1的字符


  :开关的写法

varonOff =true;

$("button").click(function()

{

if()

  {

  }else{

  }

  onOff = !onOff;

});


8、字符串分割成数组

str.split(separator,limit);  参数1指定字符串或正则,参照2指定数组的最大长度

  例:str.split("");  每个字符都被分割  ['','','','']

    str.split();    整个字符串放到数组里  ['']

  【引申】:数组变成字符串

arr.join(分隔符)      以,连接

    arr.join('')            无缝连接

    arr.join('-')          以-连接

    arr.join('<span>' + str + '</span>')       以表达式连接


9、str.replace(rgExp/substr,replaceText)   返回替换后的字符串


10、str.match(rgExp);  正则匹配




Date对象和Math对象


展开

一、创建Date对象

var time=new Date()      //  获取的是当前时间

var time=new Date(2000)    // 1970年1月1日 8时0分2秒      20000是毫秒数

var time=new Date(98,10,20,0,0,0)      //  1998年10月10日 0时0分0秒

1

2

3

4

二、Date对象的方法

分3大组:

getXxx() : 用于获取时间和日期值

setXxx() : 用于设置时间和日期值

toXxx() : 将日期转换成指定格式

1. getXxx()

创建date对象,赋值给变量time

var time=new Date()  // 获取当前时间

    document.write(time.toLocaleString())  //  2019/6/12 上午10:36:54

1

2

1.获取年份

var year=time.getFullYear() 

    console.log(year)  // 2019年

1

2

2.获取月份

var month=time.getMonth()  // 范围是0~11 所以获取的月份后面应该+1

    console.log(month+1)  // 6月

1

2

3.获取日期(某月份的多少号)

var day=time.getDate()  // 范围是1~31号

    console.log(day)  // 12号

1

2

4.获取星期几

var week=time.getDay()  // 范围是0~6

    console.log(week)  // 3  星期三

1

2

5.获取小时

var hour=time.getHours()  // 范围是0~23

    console.log(hour)  // 10(早上10点)

1

2

6.获取分钟

var minute=time.getMinutes()  // 范围是0~59

    console.log(minute)  // 44(第44分钟)

1

2

7.获取秒数

var second=time.getSeconds()  // 获取秒数,范围是0~59

    var millisecond=time.getMilliseconds()  // 获取毫秒数,范围是0~999

    console.log(second)  //  28(第28分钟)

    console.log(millisecond)  //  856(第856毫秒)


8.获取1970年1月1日至今的毫秒数

var a=time.getTime()

    console.log(a)  // 1560307994292(毫秒)


2. setXxx()

3. toXxx()

1.根据本地时间,将Date对象转换为字符串

var time=new Date()  // 获取当前时间

    document.write(time)  // Wed Jun 12 2019 10:58:00 GMT+0800 (中国标准时间)

    document.write(time.toLocaleString())  //  2019/6/12 上午10:36:54


三、Math对象的方法

ceil(x) : 对数进行上舍入=往大的取

var a=3.1

    a=Math.ceil(a)

    console.log(a)  // 4


floor(x) : 对数进行下舍入=往小的取

var b=3.9

    b=Math.floor(b)

    console.log(b)  // 3


round(x) : 四舍五入

var c=3.6

    c=Math.round(c)

    console.log(c)  // 4  随机


random() 返回0~1的随机数 [ 0 , 1 )

parseInt(Math.random()*10) 随机整数[ 0 , 10 )

parseInt(Math.random()*4+1) 随机整数[ 1 , 5 )

parseInt(Math.random()*(max-min)+min) 随机整数 [ min , max )

parseInt(Math.random()*(max-min+1)+min) 随机整数 [ min , max ]


Math & Date & 定时器

原创零碎゛記忆 。 最后发布于2019-03-14 20:27:24 阅读数 31  收藏

展开

Math对象方法

Math.PI //3.1415926

round() //四舍五入

ceil() //向上取整

floor() //向下取整

fandom() //返回0-1之间的随机数(不包括1)

max() //返回较大的数

min() //返回较小的数

abs() //绝对值

pow(x,y) //x的y次方

sqrt(unm) //开平方

sin(radian)

cos(radian)

can(radian) //radian:弧度

日期

创建日期

(1) var d = new Date

得到本地时间

(2) var d = new Date(“2017/10/10 12:10:00”)

传入字符串,返回特定的时间对象

(3) var d = new Data(56264946884);

传入距离1970年1月1日0时0分0秒的毫秒数,返回特定的时间对象

日期对象的获取的方法

(1) d.getFullYear() 获取年份

(2) d.getMonth() 获取月份,0-11代表1到12月

(3) d.getDate() 获取日

(4) d.getDay() 获取星期几得到0-6,星期天到星期六

(5) d.getHours() 获取小时

(6) d.getMinutes() 获取分钟

(7) d.getSeconds() 获取秒

(8) d.getTime() 获取某个日期自1970年1月1日0时以来的毫秒数

日期对象的设置方法

(1) d.setFullYear() 设置年份

(2) d.setMonth() 设置月份,0-11代表1到12月

(3) d.setDate() 设置日

(4) d.setHours() 设置小时

(5) d.setMinutes() 设置分钟

(6) d.setSeconds() 设置秒

(7) d.setTime() 修改某个日期自1970年1月1日0时以来的毫秒数

定时器

(1) setInterval(fn, time)

每隔time毫秒执行一次函数,间隔执行 time为毫秒数

(2) setTimeout(fn,time)

延迟time毫秒执行函数,只执行一次

(3) clearInterval(变量名)

清空变量名对应的定时器

(4) clearTimeout(变量名)

清空变量对应的定时器

es5获取毫秒数(静态方法)

(1) Date.parse(“2020-01-01 00:00:00”)

获取特定日期距离1970年的毫秒数

(2) Date.now()

获取当前日期距离1970年的毫秒数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容