js中 ~~这个符号是什么意思

今天在看到一个关于JS对象数组Array根据对象objectkey的值排序sort代码是这样的函数定义:functionkeysrt(key,desc){returnfu... 今天在看到一个关于JS 对象数组Array根据对象object key的值排序sort 代码是这样的
函数定义:
function keysrt(key,desc) {
return function(a,b){
return desc ? ~~(a[key] < b[key]) : ~~(a[key] > b[key]);
}
}

使用:
var ary=[{id:1,name:"b"},{id:2,name:"b"}];
ary.sort(keysrt('name',true));
ary.sort(keysrt('name',false));
ary.sort(keysrt('id',false));

代码我运行过没问题。但是不理解函数定义里那个~~什么意思,有知道的给解释一下吗?谢谢
展开
 我来答
百度网友6705c13
2017-09-12 · TA获得超过801个赞
知道小有建树答主
回答量:613
采纳率:83%
帮助的人:201万
展开全部
~是js里的按位取反操作符,~~就是执行两次按位取反,其实就是保持原值,但是注意虽然是原值,但是对布尔型变量执行这个操作,会转化成相应的数值型变量,也就是 ~~true === 1,~~false === 0。
你的例子里就是利用了这个特性,keystr方法要求返回值是数值型,但是a[key] < b[key]得到的结果是true或false,布尔型,所以用~~处理一下,这种方法速度快,代价远小于写表达式或者判断条件。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式