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