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 相关文章推荐
JavaScript中获取未知对象属性的代码
Apr 27 Javascript
js读取注册表的键值示例
Sep 25 Javascript
用jQuery模拟select下拉框的简单示例代码
Jan 26 Javascript
jQuery 浮动导航菜单适合购物商品类型的网站
Sep 09 Javascript
js实现非常简单的焦点图切换特效实例
May 07 Javascript
jQuery语法小结(超实用)
Dec 31 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
May 31 Javascript
Node.js Addons翻译(C/C++扩展)
Jun 12 Javascript
简单实现js鼠标跟随效果
Aug 02 Javascript
js实现随机点名小功能
Aug 17 Javascript
解决JavaScript中0.1+0.2不等于0.3问题
Oct 23 Javascript
jQuery实现网页拼图游戏
Apr 22 jQuery
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的消息通信机制测试实例
2016/11/10 PHP
php创建多级目录与级联删除文件的方法示例
2019/09/12 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
jquery特效 幻灯片效果示例代码
2013/07/16 Javascript
PHP中使用微秒计算脚本执行时间例子
2014/11/19 Javascript
jquery对table做排序操作的实例演示
2017/08/10 jQuery
vue插槽slot的理解和使用方法
2019/04/03 Javascript
Vue 实现前进刷新后退不刷新的效果
2019/06/14 Javascript
js实现旋转的星空效果
2019/11/01 Javascript
JS数组方法join()用法实例分析
2020/01/18 Javascript
js实现视图和数据双向绑定的方法分析
2020/02/05 Javascript
javascript实现京东登录显示隐藏密码
2020/08/02 Javascript
uniapp开发小程序实现滑动页面控制元素的显示和隐藏效果
2020/12/10 Javascript
如何在vue 中使用柱状图 并自修改配置
2021/01/21 Vue.js
详解duck typing鸭子类型程序设计与Python的实现示例
2016/06/03 Python
Win10下python 2.7.13 安装配置方法图文教程
2018/09/18 Python
使用python将时间转换为指定的格式方法
2018/11/12 Python
python+pyqt5实现KFC点餐收银系统
2019/01/24 Python
Python:合并两个numpy矩阵的实现
2019/12/02 Python
Pytorch模型转onnx模型实例
2020/01/15 Python
django Layui界面点击弹出对话框并请求逻辑生成分页的动态表格实例
2020/05/12 Python
墨西哥网上购物:Linio墨西哥
2016/10/20 全球购物
美国知名的时尚购物网站:Anthropologie
2016/12/22 全球购物
德国家具在线:Fashion For Home
2017/03/11 全球购物
波兰最早的运动鞋精品店之一:Street Supply
2019/08/29 全球购物
土木工程实习生自我鉴定
2013/09/19 职场文书
关于安全的标语
2014/06/10 职场文书
组工干部对照检查材料
2014/08/25 职场文书
2015年学校财务工作总结
2015/05/19 职场文书
教师节主持词开场白
2015/05/29 职场文书
高中军训感想
2015/08/07 职场文书
护士工作心得体会
2016/01/25 职场文书
python中opencv实现图片文本倾斜校正
2021/06/11 Python
基于Go语言构建RESTful API服务
2021/07/25 Golang
CSS+HTML 实现顶部导航栏功能
2021/08/30 HTML / CSS
yolov5返回坐标的方法实例
2022/03/17 Python