slice 的源码和我的注释如下:
function slice(array, start, end) { let length = array == null ? 0 : array.length if (!length) { return [] } start = start == null ? 0 : start end = end === undefined ? length : end if (start < 0) { start = -start > length ? 0 : (length + start) } end = end > length ? length : end if (end < 0) { end += length } length = start > end ? 0 : ((end - start) >>> 0) start >>>= 0
let index = -1 const result = new Array(length) while (++index < length) { result[index] = array[index + start] } return result }
|
从上面的源码分析我们可以看出,这个 slice 函数相对于原生的 slice 方法,优势在于:
(1) 传入的 array 即使不是数组,也不会抛出异常,而是会返回一个空数组,这在工作中可以解决那些数据类型传错会抛出错误导致程序崩溃的问题
(2) 函数式的调用,更加简单易懂
这段代码对参数做了全面细致的校验,从而保证可以返回正确的值,很值得我们学习。