数组的API (引用程序编程接口) 库
1、静态方法(构造函数方法)
    Array.isArray(arr)                    判断参数arr是否是数组
    Array.of()                            es6中的方法,将参数放到数组中返回
    例子:Array.of(3)     [3]
         Array.of(3,4)   [3,4]

2、非静态方式(构造函数原型中的方法,实例方法)
  1. 循环类
    Array.prototype.forEach(handler)
    作用:遍历指定数组
    参数:回调函数,可以接受3个参数(item,index,arr)forEach方法每次遍历出来一个元素后都执行该回调函数
    返回值:undefined
    arr.forEach(function(item,index,arr){
    item 为每次遍历出来的元素
    index为遍历时候的索引
    arr为当前正在遍历的数组
    })

   Array.prototype.every(handler)
   作用:遍历指定数组,判断是否每个元素都满足指定条件
   参数:回调函数,可以接受3个参数(item,index,arr),该回调函数会返回一个boolean值,当所有回调函数返回true,最终every方法的结果为true, 当有一个回调函数返回了false,该函数中止,every方法的结果为false
   返回值:boolean

   Array.prototype.some(handler)
   作用:遍历指定数组,判断是否有元素都满足指定条件
   参数:回调函数,可以接受3个参数(item,index,arr),该回调函数会返回一个boolean值,当有回调函数返回true,该函数中止,最终every方法的结果为true, 当所回调函数返回了false,every方法的结果为false
   返回值:boolean

   Array.prototype.map(handler)
   作用:从指定元素中映射出某些值,组成新的数组返回
   参数:回调函数,可以接受3个参数(item,index,arr),该回调函数会返回一个数组,数组元素为每个回调函数返回的值
   返回值:Array

   Array.prototype.filter(handler)
   作用:从指定中过滤出满足条件的元素,组成新的数组返回
   参数:回调函数,可以接受3个参数(item,index,arr),该回调函数会返回一个数组,数组元素为回调函数返回值为true的那个元素
   返回值:Array

 2. 栈方法
   后进先出结构
   Array.prototype.push(v)   【原值改变】
   作用:入栈,为指定数组添加元素,该元素添加到数组的末尾
   参数:可以多个任意类型的数组
   返回值:数组的长度
   例子:var arr = [1,2,3];
        arr.push(4,5,6)   // arr [1,2,3,4,5,6]

   Array.prototype.pop()     【原值改变】
   作用:出栈,将数组末尾的值删除并且返回
   参数:
   返回值:出栈的元素
   例子:var arr = [1,2,3];
        arr.pop()   // arr [1,2]  返回值3
 3. 队列方法
   先进先出
   Array.prototype.shift()     【原值改变】
   作用:出队列,将数组开头的值删除并且返回
   参数:
   返回值:出队列的元素

   Array.prototype.unshift()   【原值改变】
   作用:在数组开头插入一个值删除并且返回数组长度
   参数:值
   返回值:数组长度

 4. 排序方法
   反转序列
   Array.prototype.reverse()   【原值改变】
   作用:将数组中的元素反转
   参数:
   返回值:反转之后的数组

   Array.prototype.sort()   【原值改变】
   作用:排序, 如果没有参数,将会按照字符串[如果是其他数据类型,先转换成字符串]的顺序进行排序;如果参数由比较器函数,则按照比较器函数规则进行排序
   参数:无 或 比较器函数
   比较器函数接受两个参数,a,b,当a>b返回1,a<=b返回-1,正序
   当比较器函数返回值大于0,a排在b的后面,
        function(a,b){
          if(a>b){
            return 1;     // a排在b的后面,大的在后面,升序
          } else  {
            return -1;    // a排在b的前面,小的在前,升序
          }
        }
    返回值:排序后的数组

      1) 比较器函数生成函数
      function compare(prop){
        return function(a,b){
          if(a[prop]>b[prop]){
            return -1;
          } else {
            return 1;
          }
        }
      }
      2) 调用生成函数生成一个比较器函数,f为比较器函数
      var f = compare("price")
      3) 将比较器函数作为参数传递给sort
      goods.sort(f);
      ---等价于---
      goods.sort((function(prop){
        return function(a,b){
          if(a[prop]>b[prop]){
            return -1;
          } else {
            return 1;
          }
        }
      })("price"));
 5.数组分割函数
  Array.prototype.slice(begin,end)   【原值不改变】
  作用:从指定数组中获取子数组,不改变原值。
  参数:begin开始位置;end结束位置,不包含结束位置,end可以省略,截取到数组末尾
  返回值:截取的子数组

  Array.prototype.splice(begin,len,a,b,c...)   【原值改变】
  作用:删除,替换,插入
  参数:begin开始位置;len删除的元素个数,a,b,c插入的元素
  返回值:删除元素组成的数组

 6. 数组元素查找
   Array.prototype.indexOf(item)  
   作用:从数组前往后查找item所在的索引,找到之后不再检索
   参数:要查找的元素值
   返回值:索引/-1

   Array.prototype.lastIndexOf(item)  
   作用:从数组后往前查找item所在的索引,找到之后不再检索
   参数:要查找的元素值
   返回值:索引/-1

7. 数组合并
   Array.prototype.concat() 【原值不改变】
   作用:合并数组
   参数:数组
   返回值:合并后的数组

8. 数组的序列化
   Array.prototype.join(s)
   将数组转换为字符串,通过s分割开数组中每个元素。
   JSON.stringify()          // es标准
   querystring.stringify()   // nodejs,浏览器(第三方)