js中的数组实际上就是一个Array对象的实例,继承来自Array.prototype的属性和方法!
 属性
- length(
Array.prototype.length):返回数组的长度;注意只有数字索引或者能被转换为数字的索引才会被计入! 
1 2 3 4 5 6 7 8
   | var arr = []; arr[0] = 1; arr[3] = "xxf"; arr["name"] = "xuefeng";
  arr.length;  arr[1];  arr.name; 
   | 
 
js数组的长度是根据索引中最大的数字决定的(?),且中间没有被赋值的索引被访问时的值默认为undefined!且其中的非数字索引或者对象属性不会被计入到length中的,但是可以强制转化为十进制数字的索引是有效的:
1 2 3 4
   | var arr = []; arr["12"] = "cctv"; 
  arr.length; 
   | 
 
- constructor(
Array.prototype.constructor):返回的就是Array本身!即所有数组实例的构造器都是继承自Array对象! 
1 2
   | var arr = [1, 2, 3]; arr.constructor; 
   | 
 
 访问方法
所有的访问方法绝对不会改变调用它们的对象的值,只会返回一个新的数组或者返回一个其它的期望值。
- concat方法:用于合并多个数组或多个元素,返回一个新的数组;
 
1 2 3 4 5
   | 
 
 
  Array.prototype.concat(val1[, val2[, ...[, valN]]]);
 
  | 
 
- join方法:连接数组内所有的元素并返回一个字符串;数组中元素值为
null或undefined的,该元素则转化为空字符串! 
1 2 3 4 5 6 7 8 9 10 11 12 13
   | 
 
 
 
  Array.prototype.join(separator);
 
  var arr = [1, 2, 3]; arr.join();  arr.join("");  arr.join("-");  arr.join(", "); 
 
  | 
 
- slice方法:返回一个从开始到结束(不包括结束索引的那个元素!)选择的数组的一部分浅拷贝到一个新数组对象。原始数组不会被修改。
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
   | 
 
 
 
 
  Array.prototype.slice([begin[, end]]);
 
 
  var arr = [1, 2, 3];
  arr.slice();  arr.slice(1);  arr.slice(0, 2);  arr.slice(0, -1); 
 
  | 
 
- 
toString方法:相当于arr.join(),即直接用,连接所有元素返回一个字符串;
 
- 
indexOf方法:返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1;
 
1 2 3 4 5 6
   | 
 
 
 
  Array.prototype.indexOf(elem[, startIndex=0]);
 
  | 
 
 修改器方法
所有的修改器方法会改变调用它们的对象自身的值!
- 
push方法:在数组的末尾添加一个或多个元素,并返回数组的新长度;
 
- 
pop方法:删除数组的最后一个元素,并返回这个元素;
 
- 
reserve方法:颠倒数组中所有元素的顺序,并返回颠倒后的数组;
 
- 
shift方法:删除数组中第一个元素,并返回这个元素;
 
- 
unshift方法:在数组的开头添加一个或多个元素,并返回数组的新长度;
 
- 
sort方法:对数组元素进行排序,并返回当前数组;
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
   | 
 
 
 
 
 
  Array.prototype.sort([compareFunction]);
 
  var fruit = ['cherries', 'apples', 'bananas']; fruit.sort(); 
 
  var scores = [1, 10, 21, 2];  scores.sort(); 
 
 
 
  var things = ['word', 'Word', '1 Word', '2 Words']; things.sort(); 
 
 
 
 
 
 
 
 
 
 
 
  function compare(a, b){     return a - b; }
  var arr = [4, 1, 12, 9]; arr.sort(compare); 
 
  | 
 
- splice方法:通过删除现有元素和/或添加新元素来更改一个数组的内容,并且返回被删除的元素(以数组的形式);
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
   | array.splice(start)
  array.splice(start, deleteCount) 
 
 
 
 
  array.splice(start, deleteCount, item1, item2, ...)
 
 
 
 
 
  var arr = [1, 2, 3]; arr.splice(1, 1); 
 
  var myFish = ['angel', 'clown', 'mandarin', 'sturgeon']; var removed = myFish.splice(2);
 
 
   | 
 
 迭代方法
在下面的众多遍历方法中,有很多方法都需要指定一个回调函数作为参数。在每一个数组元素都分别执行完回调函数之前,数组的length属性会被缓存在某个地方,所以,如果你在回调函数中为当前数组添加了新的元素,那么那些新添加的元素是不会被遍历到的。此外,如果在回调函数中对当前数组进行了其它修改,比如改变某个元素的值或者删掉某个元素,那么随后的遍历操作可能会受到未预期的影响。总之,不要尝试在遍历过程中对原数组进行任何修改,虽然规范对这样的操作进行了详细的定义,但为了可读性和可维护性,请不要这样做。(MDN)
- forEach方法:为数组中的每个元素执行一次回调函数;该方法没有返回值!
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14
   | 
 
 
  array.forEach(callback[, thisArg]);
  callback = function(currentValue, index, array){      };
 
 
 
 
 
 
  | 
 
- every方法:如果数组中的每个元素都满足测试函数,则返回
true,否则返回 false;该方法不会改变原数组! 
1 2 3 4
   | 
 
  arr.every(callback[, thisArg]);
 
  | 
 
every方法为数组中的每个元素执行一次 callback 函数,直到它找到一个使 callback 返回 false(表示可转换为布尔值 false 的值)的元素。如果发现了一个这样的元素,every 方法将会立即返回 false。否则,callback 为每一个元素返回 true,every 就会返回 true。callback只会为那些已经被赋值的索引调用。不会为那些被删除或从来没被赋值的索引调用。(MDN)
- some方法:如果数组中至少有一个元素满足测试函数,则返回 
true,否则返回 false。 
1
   | arr.some(callback[, thisArg]);
   | 
 
- filter方法:将所有在过滤函数中返回
true 的数组元素放进一个新数组中并返回。 
1 2 3 4 5 6 7 8 9 10 11
   |  var new_array = arr.filter(callback[, thisArg]);
 
  function isBigEnough(value) {   return value >= 10; }
  var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
 
 
 
  | 
 
- map方法:返回一个由回调函数的返回值组成的新数组;
 
1 2 3 4 5 6 7 8
   | var new_array = arr.map(function callback(currentValue, index, array) {       }[, thisArg]);
 
  var numbers = [1, 4, 9]; var roots = numbers.map(Math.sqrt);
 
  | 
 
- reduce方法:
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
   | 
 
 
  arr.reduce(callback[, initialValue]);
 
 
 
 
 
 
 
  callback = function(accumulator, currentValue, currentIndex, array){     
 
      return ; }
 
  | 
 
回调函数第一次执行时,accumulator 和currentValue的取值有两种情况:调用reduce时提供initialValue,accumulator取值为initialValue,currentValue取数组中的第一个值;没有提供 initialValue,accumulator取数组中的第一个值,currentValue取数组中的第二个值。(MDN)
- find方法:返回数组中满足提供的测试函数的第一个元素的值,否则返回 
undefined。 
1 2 3 4 5 6 7 8 9 10 11 12 13
   | 
 
 
  arr.find(callback[, thisArg]);
  function enough(val) {     return val > 20; }
  var arr = [12, 16, 6, 23, 8, 29];
  console.log(arr.find(enough)); 
 
  | 
 
 参考文档
- Array - JavaScript | MDN