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 相关文章推荐
Google韩国首页图标动画效果
Aug 26 Javascript
比较全的JS checkbox全选、取消全选、删除功能代码
Dec 19 Javascript
利用jQuery 实现GridView异步排序、分页的代码
Feb 06 Javascript
jQuery.Validate验证库的使用介绍
Apr 26 Javascript
用C/C++来实现 Node.js 的模块(一)
Sep 24 Javascript
JS设置下拉列表框当前所选值的方法
Dec 22 Javascript
jquery实现简单的全选和反选功能
Jan 02 Javascript
Vue 过滤器filters及基本用法
Dec 26 Javascript
vue-cli3.0如何使用CDN区分开发、生产、预发布环境
Nov 22 Javascript
详解基于Vue的支持数据双向绑定的select组件
Sep 02 Javascript
js 获取扫码枪输入数据的方法
Jun 10 Javascript
js动态添加带圆圈序号列表的实例代码
Feb 18 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
在Laravel 的 Blade 模版中实现定义变量
2019/10/14 PHP
分享8个Laravel模型时间戳使用技巧小结
2020/02/12 PHP
javascript xml为数据源的下拉框控件
2009/07/07 Javascript
js下获得客户端操作系统的函数代码(1:vista,2:windows7,3:2000,4:xp,5:2003,6:2008)
2011/10/31 Javascript
jquery实现智能感知连接外网搜索
2013/05/21 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
2013/11/20 Javascript
jquery 追加元素append、prepend、before、after用法与区别分析
2016/12/02 Javascript
JS中from 表单序列化提交的代码
2017/01/20 Javascript
Bootstrap下拉菜单样式
2017/02/07 Javascript
微信小程序实现发送模板消息功能示例【通过openid推送消息给用户】
2019/05/05 Javascript
深入解析微信小程序开发中遇到的几个小问题
2020/07/11 Javascript
python中base64加密解密方法实例分析
2015/05/16 Python
pandas 读取各种格式文件的方法
2018/06/22 Python
在Python中构建增广矩阵的实现方法
2019/07/01 Python
python 返回一个列表中第二大的数方法
2019/07/09 Python
python序列化与数据持久化实例详解
2019/12/20 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
2020/05/22 Python
pycharm sciview的图片另存为操作
2020/06/01 Python
Python分析最近大火的网剧《隐秘的角落》
2020/07/02 Python
django表单中的按钮获取数据的实例分析
2020/07/31 Python
Python爬取豆瓣数据实现过程解析
2020/10/27 Python
python中操作文件的模块的方法总结
2021/02/04 Python
美国学校校服,儿童和婴儿服装:Cookie’s Kids
2016/10/14 全球购物
苏宁红孩子母婴商城:redbaby
2017/02/12 全球购物
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
运动鞋、足球鞋和慕尼黑球衣:Sport Münzinger
2019/08/26 全球购物
传播学专业毕业生自荐信
2013/11/04 职场文书
小学生家长评语集锦
2014/01/30 职场文书
工伤私了协议书范本
2014/11/24 职场文书
2014年保育员工作总结
2014/12/02 职场文书
精神文明建设先进个人事迹材料
2014/12/24 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书
新生儿未入户证明
2015/06/23 职场文书
2016新年致辞
2015/08/01 职场文书
python爬虫之爬取笔趣阁小说
2021/04/22 Python
mysql 数据插入优化方法之concurrent_insert
2021/07/01 MySQL