周末下午没有特别紧急的事情,所以在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 | var animals = ['dog']; |
参数也可以是简单值类型:
1 | [].concat(1, ['dog']); // 返回: [1, "dog"] |
copyWithin
方法签名: arr.copyWithin(target[, start[, end]])
如果start/end参数省略,则默认为0;
如果target/start/end为负数,则取值为: length + target/start/end
例:
1 | const arr1 = [1, 2, 3, 4, 5, 6]; |
forEach
跳出forEach循环的方法: return或者抛出一个异常。
map
看到一个有点儿意思的关于map方法的一个坑:
1 | [1, 2, 3].map(parseInt); // 输出 1, NaN, NaN |
之所以是这样的输出,是因为map有三个参数,第一个参数时当前遍历的元素,第二个是当前元素在数组中的索引,第三个是当前遍历的数组对象。而parseInt函数有两个参数,第一个是被转换的值,第二个是基数(radix),基数为零,则为10。于是上面的例子等价于:
1 | parseInt(1, 10); |
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 | 是 |