源码解析:
function slice(array, start, end) {
// 对于参数进行规整,对于异常值进行处理
let length = array == null ? 0 : array.length
if (!length) { //规避了 array=NaN 的情况
return []
}
start = start == null ? 0 : start //规避了 start为undefined/''/null/'0'/0 等情况
end = end === undefined ? length : end
//以上 --->判断传入的参数 是否有值
//以下---> 将传入的参数转化为 整数
if (start < 0) {
//当 start 值为负时, 获取真实索引值
start = -start > length ? 0 : (length + start)
}
end = end > length ? length : end
if (end < 0) {
//当 end 值为负时, 获取真实索引值
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
}
备注:
array.slice(-2, -1) //只会有一个值
array.slice(-2) //会有两个值
6.2>>>0
//结果为6
>>>
位运算符 进行下取整
参考资料: