一、数组简介
1、数组也是一个对象,和普通对象功能类似,也是用来存储一些值的,不同的是普通对象是使用字符串作为属性名的,而数组是使用数字来作为索引操作元素。
2、索引:
从0开始的整数就是索引
3、数组的存储性能比普通对象要好,在开发中我们经常使用数组来存储一些数据。
4、使用 typeof 检查一个数组时,会返回 object 。
5、向数组中添加元素
语法:数组 [ 索引 ] = 值;
6、读取数组中的元素
语法:数组 [ 索引 ];
如果读取不存在的索引,他不会报错而是返回 undefined
7、对于连续的数组,使用 length 可以获取到数组的长度(元素的个数);对于非连续的数组,使用 length 会获取到数组的最大的索引+1。尽量不要创建非连续数组。
8、修改 length
如果修改的 length 大于原长度,则多出的部分会空出来;
如果修改的 length 小于原长度,则多出来的元素会被删除。
9、向数组的最后一个位置添加元素
语法: 数组[ 数组.length ] = 值;
二、数组字面量
1、使用字面量来创建数组
语法:[ ]
2、使用字面量来创建数组时,可以再创建时就指定数组中的元素。
3、使用构造函数创建数组时,也可以同时添加元素,将要添加的元素作为构造函数的参数传递。元素之间使用 , 隔开。
4、数组中的元素可以是任意的数据类型,也可以是对象、函数、数组。
三、数组常用的方法
1、push()
① 该方法可以向数组的末尾添加一个或多个元素,并返回数组的新的长度。
② 可以将要添加的元素作为方法的参数传递,这样这些元素将会自动添加到数组的末尾
③ 该方法会将数组新的长度作为返回值返回。
2、pop()
该方法可以删除数组的最后一个元素,并将被删除的元素作为返回值返回。
3、unshift()
向数组开头添加一个或多个元素,并返回新的数组长度。
向前边插入元素以后,其他元素索引会依次调整。
4、shift()
可以删除数组的第一个元素,并将被删除的元素作为返回值返回。
5、数组的遍历:遍历数组就是将数组中的所有元素提取出来。
6、forEach()
① 一般我们都是使用 for 循环去遍历数组,JS中还为我们提供了一个方法,用来遍历数组。
② forEach()这个方法只支持IE8以上的浏览器,IE8以下的浏览器均不支持该方法,所以如果需要兼容IE8,则不要使用 forEach(),还是使用 for 循环来遍历。
③ forEach()方法需要一个函数作为参数
—— 像这种函数,有我们创建但是不由我们调用的,我们称为 回调函数
—— 数组中有几个元素函数就会执行几次,每次执行时,浏览器会将遍历到的元素以实参的形式传递进来,我们可以来定义形参,来读取这些内容。
④ 浏览器会在回调函数中传递三个参数:
第一个参数:当前正在遍历的元素
第二个参数:当前正在遍历的元素的索引
第三个参数:正在遍历的数组
7、slice()
—— 可以用来从数组中提取指定元素
—— 该方法不会改变元素数组,而是将截取到的元素封装到一个新数组中返回
—— 参数:
① 截取开始的位置索引,包含开始索引
② 截取结束的位置索引,不包含结束索引
—— 第二个参数可以省略不写,此时会截取从开始索引往后的所有元素。
—— 索引可以传递一个负值,如果传递一个负值,则从后往前算,如:-1表示倒数第一个,-2表示倒数第二个
8、splice()
—— 可以用来删除数组中的元素
—— 使用 splice()会影响到原数组,会将指定元素从原数组中删除,并将删除的元素作为返回值返回
—— 参数:
① 第一个表示开始位置的索引
② 第二个表示删除的数量
③ 第三个及以后表示可以传递一些新的元素,这些元素将会自动插入到开始位置索引前边
五、数组的剩余方法
1、concat()
可以连接连个或者多个数组,并将新的数组返回。
——该方法不会对原数组产生影响。
2、join()
—— 该方法可以将数组转换为一个字符串。
—— 该方法不会对原数组产生影响,而是将转换后的字符串作为结果返回。
—— 在 join()中可以指定一个字符串作为参数,这个字符串将会成为数组中元素的连接符。
如果不指定连接符,则默认使用 , 作为连接符。
3、reverse()
—— 该方法用来反转数组(前边的去后边,后边的去前边)。
—— 该方法会直接修改原数组。
4、sort()
—— 可以用来对数组中的元素进行排序。
—— 也会影响原数组,默认会按照 Unicode 编码进行排序。
—— 即使对于纯数字的数组,使用 sort() 排序时,也会按照 Unicode 编码来排序。所以对于数字进行排序时,可能会得到错误的结果。
—— 我们可以指定排序的规则,可以再 sort() 添加一个回调函数,来指定排序规则,回调函数中需要定义两个形参,浏览器将会分别使用数组中的元素作为实参去调用回调函数。使用哪个元素调用不确定,但是肯定的是在数组中a一定在b前边。
—— 浏览器会根据回调函数的返回值来决定元素的顺序:
—— 如果返回一个大于0的值,则元素会交换位置。
—— 如果返回一个小于0的值,则元素位置不变。
—— 如果返回一个0,则认为两个元素相等,也不会交换位置。
—— 如果需要升序排列返回a-b;降序排列返回b-a。
六、函数的方法
1、call()和 apply()
—— 这两个方法都是函数对象的方法,需要通过函数对象来调用。
—— 当两个函数调用 call()和 apply()都会调用函数执行。
—— 在调用 call()和 apply()可以将一个对象指定为第一个参数,此时这个对象将会成为函数执行时的 this 。
—— call()方法可以将实参在对象之后依次传递;apply()方法需要将实参封装到一个数组中统一传递。
2、this 的情况:
① 以函数形式调用时,this 永远都是 window 。
② 以方法的形式调用时,this 是调用方法的对象。
③ 以构造函数的形式调用时,this 是新创建的那个对象。
④ 使用 call 和 apply 调用时,this是指定的那个对象。
七、arguments
1、在调用函数时,浏览器每次都会传递进两个隐含的参数:
① 函数的上下文对象: this
② 封装是实参的对象: arguments
2、arguments 是一个类数组对象,它也可以通过索引来操作数据,也可以获取长度。
3、在调用函数时,我们所传递的实参都会在 arguments 中保存。
4、arguments.length 可以用来获取实参的长度。
5、我们即使不定义形参,也可以通过 arguments 来使用实参,只不过比较麻烦。
6、 arguments[ 0 ] 表示第一个实参
arguments[ 1 ] 表示第二个实参
7、arguments 有一个属性叫做 callee ,这个属性对应一个函数对象,就是当前正在指向的函数的对象。
八、Date对象
1、在JS中使用 Date 对象来表示一个时间。
2、如果直接使用构造函数创建一个 Date 对象,则会封装为当前代码执行的时间。
3、创建一个指定的 Date 对象,需要在构造函数中传递一个表示时间的字符串作为参数
日期的格式: 月份/日/年 时:分:秒
4、常用的方法
(1)getDate()
—— 获取当前日期对象是几日。
(2)getDay()
—— 获取当前日起对象是周几。
—— 会返回一个 0 ~ 6 的值。
0 表示周日
(3)getMonth()
—— 获取当前对象的月份。
—— 会返回一个 0 ~ 11 的值。
0 表示 1 月
11 表示 12 月
(4)getFullTear()
—— 获取当前日期对象的年份。
(5)getTime()
—— 获取当前对象的时间戳。
—— 时间戳,指的是从格林威治标准时间的 1970年1月1日0时0分0秒到当前日期所花费的毫秒数(1秒=1000毫秒)
—— 计算机底层在保存时间时使用的都是时间戳。
本文的分享到此结束,下一节继续跟大家分享JavaScript初级学习的Math工具类,它封装了数学运算的相关属性和方法。