阅读JavaScript MDN Array

周末下午没有特别紧急的事情,所以在MDN上复习了一下JavaScript数组中方法的用法,还真有一些之前不了解的点。

Array.from

Array.from的方法签名是这样的: Array.from(arrayLike[,mapFn[,tihsArg]]),所以还可以这样用:

1
Arrya.from([1, 2, 3], x => x > 2); // [3]

Array.isArray

这个函数本身没有什么,但是MDN上举的一个例子还是第一次知道:

1
Array.isArray(Array.prototype) // true

也就是说,Array.prototype的值是个数组。

Array.of和只有一个数字参数时的Array构造函数的不同

当使用Array构造函数时,如果只给构造函数传递一个数字参数N,则结果是返回一个长度为N的数组,数组里不包含任何元素。

而相同条件下,Array.of是返回的是包含该数字的一个数字对象。

concat

这个方法可以传递多个参数,第一次知道:

1
2
3
4
5
var animals = ['dog'];
var people = ['frank'];
var coll = ['foo'];

coll.concat(animals, people); // 返回: ["foo", "dog", "frank"]

参数也可以是简单值类型:

1
[].concat(1, ['dog']); // 返回: [1, "dog"]

copyWithin

方法签名: arr.copyWithin(target[, start[, end]])

如果start/end参数省略,则默认为0;

如果target/start/end为负数,则取值为: length + target/start/end

例:

1
2
3
4
5
6
7
8
9
const arr1 = [1, 2, 3, 4, 5, 6];
const arr2 = [1, 2, 3, 4, 5, 6];

console.log(arr1.copyWithin(0, 3, 5)); // 输出: [ 4, 5, 3, 4, 5, 6 ]
console.log(arr2.copyWithin(0, 3)); // 输出: [ 4, 5, 6, 4, 5, 6 ]

console.log([1, 2, 3].copyWithin(1)); // 输出: [ 1, 2 ]
console.log([1, 2, 3].copyWithin(1, 2)); // 输出: [ 1, 3, 3 ]
console.log([1, 2, 3].copyWithin(0, -2)); // 输出: [ 2, 3, 3 ]

forEach

跳出forEach循环的方法: return或者抛出一个异常。

map

看到一个有点儿意思的关于map方法的一个:

1
[1, 2, 3].map(parseInt); // 输出 1, NaN, NaN

之所以是这样的输出,是因为map有三个参数,第一个参数时当前遍历的元素,第二个是当前元素在数组中的索引,第三个是当前遍历的数组对象。而parseInt函数有两个参数,第一个是被转换的值,第二个是基数(radix),基数为零,则为10。于是上面的例子等价于:

1
2
3
parseInt(1, 10);
parseInt(2, 1);
parseInt(3, 2);

toString

该方法覆盖了Object.prototype.toString方法,返回由逗号分隔的字符串。

常用的函数对原数组的修改情况

#方法 #是否修改原有数组
Array.prototype.concat
Array.prototype.push
Array.prototype.pop
Array.prototype.map
Array.prototype.reverse
Array.prototype.shift 修改数组的长度
Array.prototype.unshift 修改数组的长度
Array.prototype.slice 浅拷贝
Array.prototype.sort
Array.prototype.splice
Array.prototype.copyWithin