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性能优化 如何更快速加载你的JavaScript页面
Mar 17 Javascript
JS修改css样式style浅谈
May 06 Javascript
HTTP 304错误的详细讲解
Nov 13 Javascript
一个简单的jquery进度条示例
Apr 28 Javascript
jQuery实现有动画淡出效果的二级折叠菜单代码
Oct 17 Javascript
微信小程序 常用工具类详解及实例
Feb 15 Javascript
JavaScript中使用webuploader实现上传视频功能(demo)
Apr 10 Javascript
SpringMVC简单整合Angular2的示例
Jul 31 Javascript
Angular自定义组件实现数据双向数据绑定的实例
Dec 11 Javascript
vue项目中使用Hbuilder打包app 设置沉浸式状态栏的方法
Oct 22 Javascript
js微信分享接口调用详解
Jul 23 Javascript
从零搭一个自用的前端脚手架的方法步骤
Sep 23 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桌面中心(四) 数据显示
2007/03/11 PHP
一贴学会PHP 新手入门教程
2009/08/03 PHP
PHP实现Snowflake生成分布式唯一ID的方法示例
2020/08/30 PHP
js获取指定日期前后的日期代码
2013/08/20 Javascript
JavaScript用select实现日期控件
2015/07/17 Javascript
jQuery多条件筛选如何实现
2015/11/04 Javascript
ES6新特性之字符串的扩展实例分析
2017/04/01 Javascript
element-ui 表格实现单元格可编辑的示例
2018/02/26 Javascript
js 图片转base64的方式(两种)
2018/04/24 Javascript
浅析Vue 生命周期
2018/06/21 Javascript
chosen实现省市区三级联动
2018/08/16 Javascript
解决element UI 自定义传参的问题
2018/08/22 Javascript
AngularJS 事件发布机制
2018/08/28 Javascript
Vue Router history模式的配置方法及其原理
2019/05/30 Javascript
在vue中实现嵌套页面(iframe)
2020/07/30 Javascript
[01:35]2014DOTA2西雅图邀请赛 专访狐狸妈青春献给刀塔
2014/07/08 DOTA
[46:55]完美世界DOTA2联赛决赛 FTD vs Phoenix 第三场 11.08
2020/11/11 DOTA
python实现分析apache和nginx日志文件并输出访客ip列表的方法
2015/04/04 Python
用Python写一个无界面的2048小游戏
2016/05/24 Python
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
Python操作Excel插入删除行的方法
2018/12/10 Python
python TF-IDF算法实现文本关键词提取
2019/05/29 Python
python 字典 setdefault()和get()方法比较详解
2019/08/07 Python
Python中类似于jquery的pyquery库用法分析
2019/12/02 Python
Python手绘可视化工具cutecharts使用实例
2019/12/05 Python
Python图像阈值化处理及算法比对实例解析
2020/06/19 Python
基于python爬取链家二手房信息代码示例
2020/10/21 Python
美国女孩洋娃娃店:American Girl
2017/10/24 全球购物
餐饮业的创业计划书范文
2013/12/26 职场文书
六一儿童节活动策划方案
2014/01/27 职场文书
关于廉洁的广播稿
2014/01/30 职场文书
幼儿园保育员岗位职责
2014/04/13 职场文书
小学生环保倡议书
2014/05/15 职场文书
医生个人年度总结
2015/02/28 职场文书
改进工作作风心得体会
2016/01/23 职场文书
Redis高级数据类型Hyperloglog、Bitmap的使用
2021/05/24 Redis