## JS数组
- 数组也是一个对象,功能和普通对象(Object)的功能类似
- 数组中也可以保存不同的元素(属性)
- 不同的是普通对象是通过一个字符串作为属性名来操作属性的
- 而数字路是通过索引来操作元素的
- 索引 (index)
- 从0开始的整数
#### 数组的操作
- 创建数组
- var 变量 = new Array()
- var 变量 = []
- 添加元素
- 数组[索引] = 值
- arr[0]=10;
- 读取数组中的元素
- 数组[索引]
- console.log(arr[0])
- 获取数组的长度
- length属性可以获取或设置数组的长度
- 修改length的属性
- 如果将长度修改为小于之前长度的值,则多余的部分会被删除
- 如果将长度修改为大于之前长度的值,则数组中会创建出空的元素
#### 数组字面量
- 使用数组字面量可以创建数组的同时,同时向数组中添加元素
- 数组中可以保存任意类型的元素
- 数组中也可以保存数组.如果保存的依旧是数字,称之为二维数组
----------
#### 数组的方法
##### push()
- 向数组末尾添加新的元素,并返回数组新的长度
##### pop()
- 删除数组末尾的元素.并自动修正数组长度
##### unshift()
- 向数组最前面添加元素,并返回数组新的长度
##### shift()
- 删除数组最前面的元素.结果并返回被删除的元素
##### slice( )
- 截取数组中的指定元素
- 第一个参数: 截取开始位置的索引(包括开始的位置)
- 第二个参数: 截取结束位置索引(不包括结束的位置)
- 参数也可以是负数. 负数则从后往前数
- 如果第二个参数省略则从开始截取到最后
- 该方法不会影响到原数组.而是将截取的内容封装成新数组返回(需要有一个变量进行接收)
##### splice()
- 删除数组中的元素并添加新元素
- 一旦执行原数组的元素会被删除
- 第一个参数: 开始位置的索引(包括开始位置)
- 第二个参数: 删除的个数
- 第三个参数: [可选]新添加的元素. 这些元素将会被插入到开始位置之前的位置
- 如果删除个数为0则直接从开始位置索引起添加新元素
##### concat()
- 连接两个或多个数组
- 不影响原数组.返回一个新的数组(需要用变量来接收)
##### join()
- 将数组中所有的元素链接为字符串(需要一个变量接收新的数组返回结果)
- 参数: 字符串.作为连接符来连接.如果不写则默认使用逗号
##### reverse()
- 反转数组
- 影响原数组. 直接在原数组进行反转
##### sort()
- 可以用来对数组中的元素排序
- 会影响到原数组
- 默认它会按照元素的Unicode编码进行排序
- 如果希望使用sort对一个数字型的数组进行排序可能会得到不可预期的结果
----------
#### 数组去重
arr = [1,2,3,4,5,6,7,8,9,5,6,3,,4,5,2,2,5,3,2,6,2,1,4,5]
//获取数组中的数组
for(i=0;i<arr.length;i++){
//再次遍历数组.比上一次多一位开始遍历
for(j=i+1;j<arr.length;j++){
//比较两个遍历数组是否相等
if(arr[i]==arr[j]){
//进入判断,证明两个数组一样的.则把arr[j]删除
arr.splice(j,1);
//需要在同位置再比较一次
j--;
}
}
}
console.log(arr) ----> "1,2,3,4,5,6,7,8,9"
#### 遍历数组
- 遍历数组就是将数组中每一个元素都获取到
- 一般情况下遍历数组使用for循环
- i 既是索引值
for(var i=0 ; i< arr.length; i++){
console.log(arr[i]);
}
#### forEach() 方法遍历数组
- 由我们定义的但不由我们调用又可以执行的函数称为回调函数
- forEach() 中的回调函数由浏览器调用
- 浏览器遍历到一个元素就会调用一次
- 回调函数中需要传递三个参数
- 第一个参数: 正在遍历的元素 ele
- 第二个参数: 遍历元素的索引 index
- 第三个参数: 遍历的整个数组对象 obj
- IE8以下浏览器不支持该方法
#### arguments 函数
- arguments是一个类数组对象,在它里面保存着函数执行时的实参
- 函数所有的实参都在arguments中保存.
- 通过arguments即使不定义形参也可以使用参数
- arguments属性
- callee
- 代表当前正在调用的函数对象
- Array.isArray() 检查一个对象是否是数组
----------
#### call和apply
- 当调用函数对象的call和apply时都会导致函数立即执行, 相当于调用了函数一样
- 如果通过call和apply去调用一个函数,则call和apply中的第一个参数将会是函数中的this
区别:
- call的参数,需要一个一个列出来
- apply的参数,需要封装为一个数组传递