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 相关文章推荐
从阿里妈妈发现的几个不错的表单验证函数
Sep 21 Javascript
js中将字符串转换成json的三种方式
Jan 12 Javascript
JavaScript判断字符长度、数字、Email、电话等常用判断函数分享
Apr 01 Javascript
jQuery中extend()和fn.extend()方法详解
Jun 03 Javascript
JS和jQuery使用submit方法无法提交表单的原因分析及解决办法
May 17 Javascript
javascript基本语法
May 31 Javascript
浅析JavaScript函数的调用模式
Aug 10 Javascript
JS日程管理插件FullCalendar简单实例
Feb 07 Javascript
jQuery实现导航回弹效果
Feb 27 Javascript
vue-cli创建的项目,配置多页面的实现方法
Mar 15 Javascript
Node.js 实现抢票小工具 &amp; 短信通知提醒功能
Oct 22 Javascript
vue项目如何监听localStorage或sessionStorage的变化
Jan 04 Vue.js
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中的filesystem文件系统函数介绍及使用示例
2014/02/13 PHP
PHP对文件进行加锁、解锁实例
2015/01/23 PHP
php简单日历函数
2015/10/28 PHP
让焦点自动跳转
2006/07/01 Javascript
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
2010/12/06 Javascript
浅析JavaScript中的类型和对象
2013/11/29 Javascript
Jquery通过JSON字符串创建JSON对象
2014/08/24 Javascript
JavaScript通过元素索引号删除数组中对应元素的方法
2015/03/18 Javascript
jquery获取所有选中的checkbox实现代码
2016/05/26 Javascript
AngularJS基础 ng-readonly 指令简单示例
2016/08/02 Javascript
canvas快速绘制圆形、三角形、矩形、多边形方法介绍
2016/12/29 Javascript
详解使用vue-router进行页面切换时滚动条位置与滚动监听事件
2017/03/08 Javascript
原生JavaScript实现精美的淘宝轮播图效果示例【附demo源码下载】
2017/05/27 Javascript
vue环境搭建简单教程
2017/11/07 Javascript
关于 angularJS的一些用法
2017/11/29 Javascript
python连接远程ftp服务器并列出目录下文件的方法
2015/04/01 Python
用Python计算三角函数之acos()方法的使用
2015/05/15 Python
Python3 处理JSON的实例详解
2017/10/29 Python
Python3实现计算两个数组的交集算法示例
2019/04/03 Python
linux下python中文乱码解决方案详解
2019/08/28 Python
Python生成随机验证码代码实例解析
2020/06/09 Python
python新手学习使用库
2020/06/11 Python
香港草莓网土耳其网站:Strawberrynet TR
2017/03/02 全球购物
Sneaker Studio波兰:购买运动鞋
2018/04/28 全球购物
Groupon荷兰官方网站:高达70%的折扣
2019/11/01 全球购物
如何利用find命令查找文件
2016/11/18 面试题
优秀员工自荐书
2013/12/19 职场文书
就业自我评价
2014/02/04 职场文书
设计顾问服务计划书
2014/05/04 职场文书
课外访万家心得体会
2014/09/03 职场文书
客房服务员岗位职责
2015/02/09 职场文书
靠谱准确的求职信
2019/04/02 职场文书
假期读书倡议书3篇
2019/08/19 职场文书
公司财务制度:成本管理控制制度模板
2019/11/19 职场文书
教你怎么用Python处理excel实现自动化办公
2021/04/30 Python
详解Go语言Slice作为函数参数的使用
2021/07/02 Golang