javascript - js 操作符问题`~~`
本文介绍了javascript - js 操作符问题`~~`的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
今天刚看到
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));
}
解决方案
~是js里的位操作运算符,意思是按位取反。就是把操作数转换成二进制把每一位视作布尔值进行取非(not)
操作
位运算符在操作数是浮点数的情况下会向下去整,只保留整数部分。~~连用的话就是按位取反再取反,当操作数是整数的情况是返回自己,是浮点的话就相当于Math.floor
的效果。
至于+function(){}
和!function(){}
是因为js里function(){}
可以被解析为函数声明和函数表达式,而且是会优先解析为函数声明。使用+
或!
是为了让解释器将function(){}
解析为函数表达式。
这篇关于javascript - js 操作符问题`~~`的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文