JS按位非(~)运算符与~~运算符的理解分析


Posted in Javascript onJuly 31, 2011

那么,对于typeof var!==”number”的类型来说,进行运算时,会尝试转化成32位整形数据,如果无法转换成整形数据,就转换为NaN;
JS在位运算上用了更简便的一种方法来实现这中运算,那么它的实现原理大致上可以这样理解:

var testData=-2.9; 
var testResult=(typeof testData==="number"&&!isNaN(testData)&&testData!==Infinity)?(testData>0)?-Math.floor(testData)-1:-Math.ceil(testData)-1:-1;

首先,如果一个数据在尝试转换为32整形数据时,结果<0,那么就需要对其上舍入,比如-2.9->-2,如果>0,对其下舍入,比如:2.6->2;
一个数据如果不能转换为32位二进制表示,就转换为NaN;继而转为-1;比如~{}/~NaN ==-1;
又比如~function(){return 100;}->-1;
在Jquery里面,有用到比如if(!~this.className.indexOf(str)){ //do some thing…..};这里,对于this.className.indexOf(str)的返回值,要么大于-1,要么就是等于-1;在其等于-1的时候,~-1===0;然后,!~-1===true;那么就可以得出this不包含str这个class名…;
对于~~运算符,同理,它也可以表示为:
var testData=2.1; 
var testResult=(typeof testData==="number"&&!isNaN(testData)&&testData!==Infinity)?(testData>0)?Math.floor(testData):Math.ceil(testData):0;

同样采用上下舍入的方式来理解;
Javascript 相关文章推荐
Dojo 学习笔记入门篇 First Dojo Example
Nov 15 Javascript
javascript通过navigator.userAgent识别各种浏览器
Oct 25 Javascript
jQuery自定义图片上传插件实例代码
Apr 04 jQuery
angular-ngSanitize模块-$sanitize服务详解
Jun 13 Javascript
详解vue 不同环境配置不同的打包命令
Apr 07 Javascript
详解微信小程序回到顶部的两种方式
May 09 Javascript
p5.js临摹动态图形实现方法详解
Oct 23 Javascript
Node.js控制台彩色输出的方法与原理实例详解
Dec 01 Javascript
微信小程序利用for循环解决内容变更问题
Mar 05 Javascript
如何使用gpu.js改善JavaScript的性能
Dec 01 Javascript
详解微信小程序轨迹回放实现及遇到的坑
Feb 02 Javascript
CocosCreator如何实现划过的位置显示纹理
Apr 14 Javascript
JS高级拖动技术 setCapture,releaseCapture
Jul 31 #Javascript
js中判断文本框是否为空的两种方法
Jul 31 #Javascript
图片onload事件触发问题解决方法
Jul 31 #Javascript
事件绑定之小测试  onclick &amp;&amp; addEventListener
Jul 31 #Javascript
学习javascript,实现插入排序实现代码
Jul 31 #Javascript
映彩衣的js随笔(js图片切换效果)
Jul 31 #Javascript
IE6下focus与blur错乱的解决方案
Jul 31 #Javascript
You might like
php数组函数序列之rsort() - 对数组的元素值进行降序排序
2011/11/02 PHP
php中的curl_multi系列函数使用例子
2014/07/29 PHP
PHP函数积累总结
2019/03/19 PHP
jquery中交替点击事件的实现代码
2014/02/14 Javascript
js动态创建上传表单通过iframe模拟Ajax实现无刷新
2014/02/20 Javascript
jquery通过select列表选择框对表格数据进行过滤示例
2014/05/07 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
2014/07/18 Javascript
深入分析JSONP跨域的原理
2014/12/10 Javascript
javascript中几个容易混淆的概念总结
2015/04/14 Javascript
jquery if条件语句的写法
2016/05/19 Javascript
Bootstrap3.0学习教程之JS折叠插件
2016/05/27 Javascript
Node.js的Koa框架上手及MySQL操作指南
2016/06/13 Javascript
js实现仿购物车加减效果
2017/03/01 Javascript
Vue.js如何实现路由懒加载浅析
2017/08/14 Javascript
vue 每次渲染完页面后div的滚动条保持在最底部的方法
2018/03/17 Javascript
移动端滑动切换组件封装 vue-swiper-router实例详解
2018/11/25 Javascript
微信小程序使用wx.request请求服务器json数据并渲染到页面操作示例
2019/03/30 Javascript
微信小程序-form表单提交代码实例
2019/04/29 Javascript
python实现telnet客户端的方法
2015/04/15 Python
利用Fn.py库在Python中进行函数式编程
2015/04/22 Python
Django实现单用户登录的方法示例
2019/03/28 Python
Python控制Firefox方法总结
2019/06/03 Python
pyenv与virtualenv安装实现python多版本多项目管理
2019/08/17 Python
python时间与Unix时间戳相互转换方法详解
2020/02/13 Python
django实现模型字段动态choice的操作
2020/04/01 Python
python 解决Windows平台上路径有空格的问题
2020/11/10 Python
春秋航空官方网站:Spring Airlines
2017/09/27 全球购物
美国中西部家用医疗设备商店:Med Mart(轮椅、踏板车、升降机等)
2019/04/26 全球购物
工程力学专业毕业生求职信
2013/10/06 职场文书
群众路线教育实践活动方案
2014/02/02 职场文书
忠诚教育心得体会
2014/09/03 职场文书
《爱的教育》读书心得
2014/11/08 职场文书
领导欢迎词范文
2015/01/26 职场文书
2015年保育员个人工作总结
2015/05/13 职场文书
使用vue-element-admin框架从后端动态获取菜单功能的实现
2021/04/29 Vue.js
python基础之函数的定义和调用
2021/10/24 Python