javascript - js 操作符问题`~~`
天蓬老师
天蓬老师 2017-04-11 13:06:38
[JavaScript讨论组]

今天刚看到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));
}
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(2)
黄舟

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

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

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

阿神
  • function(){}、?function(){}、!function(){} 就是省略后面的()和(function(){...})()没什么区别
    ~ 是位取反 两个就是取反再取反

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号