今天看源码时无意中看到这么一段,如下:
length = start > end ? 0 : ((end - start) >>> 0);
这是lodash中一个叫做baseSlice()函数的一段,原代码是:
function baseSlice(array, start, end) { var index = -1, length = array.length; 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; var result = Array(length); while (++index < length) { result[index] = array[index + start]; } return result; }
那么问题来了,这个>>>0有什么用途吗?这和普通的end-start有什么区别?
我只知道一些基本的位运算符的应用,比如1<<1,相当与1*2,这个我第一次见。
去网上search了一圈,没找到很明确的答案。
求大神给科普一下,涨涨知识,谢谢。
移位操作只能作用于整数,这句话的意思是将(end-start)转换为正整数
应该是转化成数字类型
数字取整型 大概这个意思
((end - start) >>> 0) 跟 ((end - start) | 0) 效果一样
这个是 >>> 无符号位移运算符,相当于把原来的符号位转为了一个数值位。