周末下午没有特别紧急的事情,所以在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 | 是 |