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 相关文章推荐
JS 按钮点击触发(兼容IE、火狐)
Aug 07 Javascript
解析jquery中的ajax缓存问题
Dec 19 Javascript
JavaScript学习笔记之数组的增、删、改、查
Mar 23 Javascript
js利用clipboardData实现截屏粘贴功能
Oct 12 Javascript
Jqprint实现页面打印
Jan 06 Javascript
微信小程序 图片宽度自适应的实现
Apr 06 Javascript
react-native-tab-navigator组件的基本使用示例代码
Sep 07 Javascript
详解使用Vue Router导航钩子与Vuex来实现后退状态保存
Sep 11 Javascript
vue.js内置组件之keep-alive组件使用
Jul 10 Javascript
JS封装的模仿qq右下角消息弹窗功能示例
Aug 22 Javascript
聊聊鉴权那些事(推荐)
Aug 22 Javascript
微信小程序对图片进行canvas压缩的方法示例详解
Nov 12 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
别人整理的服务器变量:$_SERVER
2006/10/20 PHP
详解Grunt插件之LiveReload实现页面自动刷新(两种方案)
2015/07/31 PHP
PHP中字符串长度的截取用法示例
2017/01/12 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
在laravel中实现将查询的对象转换为多维数组的函数
2019/10/21 PHP
High Performance JavaScript(高性能JavaScript)读书笔记分析
2011/05/05 Javascript
firefox下jQuery UI Autocomplete 1.8.*中文输入修正方法
2012/09/19 Javascript
浏览器窗口大小变化时使用resize事件对框架不起作用的解决方法
2014/05/11 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
jQuery使用unlock.js插件实现滑动解锁
2017/04/04 jQuery
纯js实现画一棵树的示例
2017/09/05 Javascript
基于webpack.config.js 参数详解
2018/03/20 Javascript
Vue仿支付宝支付功能
2018/05/25 Javascript
微信小程序使用map组件实现路线规划功能示例
2019/01/22 Javascript
从零使用TypeScript开发项目打包发布到npm
2020/02/14 Javascript
[04:03]DOTA2肉山黑名单梦之声 风暴之灵中文配音鉴赏
2013/07/03 DOTA
linux系统使用python获取cpu信息脚本分享
2014/01/15 Python
Python中operator模块的操作符使用示例总结
2016/06/28 Python
LRUCache的实现原理及利用python实现的方法
2017/11/21 Python
[原创]pip和pygal的安装实例教程
2017/12/07 Python
解决csv.writer写入文件有多余的空行问题
2018/07/06 Python
使用python对文件中的数值进行累加的实例
2018/11/28 Python
python的一些加密方法及python 加密模块
2019/07/11 Python
Python3.7 pyodbc完美配置访问access数据库
2019/10/03 Python
python中提高pip install速度
2020/02/14 Python
python爬虫请求头的使用
2020/12/01 Python
HTML5本地存储之IndexedDB
2017/06/16 HTML / CSS
HTML5离线应用与客户端存储的实现
2018/05/03 HTML / CSS
CK加拿大官网:Calvin Klein加拿大
2020/03/14 全球购物
如何打印出当前源文件的文件名以及源文件的当前行号
2015/04/05 面试题
请解释virtual关键字的含义
2015/06/17 面试题
会计顶岗实习心得
2014/01/25 职场文书
离婚协议书范本
2015/01/26 职场文书
2016年企业安全生产月活动总结
2016/04/06 职场文书
MySQL 字符集 character
2022/05/04 MySQL
使用opencv-python如何打开USB或者笔记本前置摄像头
2022/06/21 Python