为了账号安全,请及时绑定邮箱和手机立即绑定

js 操作符问题`~~`

js 操作符问题`~~`

鸿蒙传说 2018-09-06 14:38:08
今天刚看到js归并排序排序有一段知道作用和Math.floor()一样,~是取反的意思,两次取反还是什么的,之前在jQuery源码里面还见到类似 + function(){}、?function(){}、!function(){}.这样的目的是什么,让源码看起来更加简单,效率更高还是怎么?求教!!!function merge(left, right) {  var tmp = [];  while (left.length && right.length) {    if (left[0] < right[0])       tmp.push(left.shift());    else       tmp.push(right.shift());   }  return tmp.concat(left, right); } function mergeSort(a) {  if (a.length === 1)      return a;  var mid = ~~(a.length / 2) //------------------->"~~"     , left = a.slice(0, mid)     , right = a.slice(mid);  return merge(mergeSort(left), mergeSort(right)); }
查看完整描述

1 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

~是js里的位操作运算符,意思是按位取反。就是把操作数转换成二进制把每一位视作布尔值进行取非(not)操作

位运算符在操作数是浮点数的情况下会向下去整,只保留整数部分。~~连用的话就是按位取反再取反,当操作数是整数的情况是返回自己,是浮点的话就相当于Math.floor的效果。

至于+function(){}!function(){}是因为js里function(){}可以被解析为函数声明和函数表达式,而且是会优先解析为函数声明。使用+!是为了让解释器将function(){}解析为函数表达式。


查看完整回答
反对 回复 2018-10-16
  • 1 回答
  • 0 关注
  • 598 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信