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 replace(rgExp,fn)正则替换的用法
Mar 04 Javascript
Jquery UI震动效果实现原理及步骤
Feb 04 Javascript
JS判断移动端访问设备并加载对应CSS样式
Jun 13 Javascript
深入理解JavaScript系列(39):设计模式之适配器模式详解
Mar 04 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
May 26 Javascript
跟我学习javascript的call(),apply(),bind()与回调
Nov 16 Javascript
jQuery判断元素是否显示 是否隐藏的简单实现代码
May 19 Javascript
Backbone中View之间传值的学习心得
Aug 09 Javascript
Bootstrap轮播插件使用代码
Oct 11 Javascript
BootStrap中
Dec 10 Javascript
vue父子组件的通信方法(实例详解)
Nov 10 Javascript
Vue中computed及watch区别实例解析
Aug 01 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
杏林同学录(二)
2006/10/09 PHP
PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
2013/04/08 PHP
说说JSON和JSONP 也许你会豁然开朗
2012/09/02 Javascript
在JavaScript中判断整型的N种方法示例介绍
2014/06/18 Javascript
js实现点击链接后窗口缩小并居中的方法
2015/03/02 Javascript
javascript获取系统当前时间的方法
2015/11/19 Javascript
JavaScript简单实现鼠标移动切换图片的方法
2016/02/23 Javascript
盘点javascript 正则表达式中 中括号的【坑】
2016/03/16 Javascript
javascript基础知识讲解
2017/01/11 Javascript
详解Javascript中DOM的范围
2017/02/13 Javascript
JavaScript实现自动跳转文本功能
2017/05/25 Javascript
JavaScript 2018 中即将迎来的新功能
2018/09/21 Javascript
H5+C3+JS实现五子棋游戏(AI篇)
2020/05/28 Javascript
基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法
2018/12/09 Javascript
JS+html5实现异步上传图片显示上传文件进度条功能示例
2019/11/09 Javascript
浅谈Vue开发人员的7个最好的VSCode扩展
2021/01/20 Vue.js
Python3基础之list列表实例解析
2014/08/13 Python
用python建立两个Y轴的XY曲线图方法
2019/07/08 Python
Python模块_PyLibTiff读取tif文件的实例
2020/01/13 Python
Mac PyCharm中的.gitignore 安装设置教程
2020/04/16 Python
使用Python内置模块与函数进行不同进制的数的转换
2020/04/26 Python
纯CSS3实现手风琴风格菜单具体步骤
2013/05/06 HTML / CSS
师范毕业生个人求职信
2013/12/09 职场文书
生产班组长岗位职责
2014/01/05 职场文书
英语故事演讲稿
2014/04/29 职场文书
大学生活动总结怎么写
2014/04/29 职场文书
小学模范班主任事迹材料
2014/05/13 职场文书
暑期培训班策划方案
2014/08/26 职场文书
《微笑着面对生活》优秀演讲稿范文
2014/09/23 职场文书
土木工程专业本科生求职信
2014/10/01 职场文书
2015年度党风廉政建设工作情况汇报
2015/01/02 职场文书
2015年学校安全管理工作总结
2015/05/11 职场文书
从np.random.normal()到正态分布的拟合操作
2021/06/02 Python
原生JavaScript实现简单五子棋游戏
2021/06/28 Javascript
十大最强飞行系宝可梦,BUG燕上榜,第二是飞行系王者
2022/03/18 日漫
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
2022/06/21 Python