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 相关文章推荐
从父页面读取和操作iframe中内容方法
Jul 25 Javascript
动态标签 悬停效果 延迟加载示例代码
Nov 21 Javascript
JavaScript lastIndexOf方法入门实例(计算指定字符在字符串中最后一次出现的位置)
Oct 17 Javascript
JavaScript中用字面量创建对象介绍
Dec 31 Javascript
javascript实现table选中的行以指定颜色高亮显示的方法
May 13 Javascript
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
Jun 12 Javascript
全面解析Javascript无限添加QQ好友原理
Jun 15 Javascript
详解JavaScript对象的深浅复制
Mar 30 Javascript
基于vue实现网站前台的权限管理(前后端分离实践)
Jan 13 Javascript
Vue中的scoped实现原理及穿透方法
May 15 Javascript
Vue中使用 setTimeout() setInterval()函数的问题
Sep 13 Javascript
vue-router 前端路由之路由传值的方式详解
Apr 30 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入门基础之php代码写法
2011/12/30 PHP
新手菜鸟必读:session与cookie的区别
2013/08/22 PHP
PHP删除数组中空值的方法介绍
2014/04/14 PHP
PHP更安全的密码加密机制Bcrypt详解
2017/06/18 PHP
javascript Base类 包含基本的方法
2009/07/22 Javascript
jquery插件validate验证的小例子
2013/05/08 Javascript
javascript查找字符串中出现最多的字符和次数的小例子
2013/10/29 Javascript
js正则表达式中test,exec,match方法的区别说明
2014/01/29 Javascript
javascript定义变量时加var与不加var的区别
2014/12/22 Javascript
EditPlus 正则表达式 实战(3)
2016/12/15 Javascript
JS正则RegExp.test()使用注意事项(不具有重复性)
2016/12/28 Javascript
AngularJS 文件上传控件 ng-file-upload详解
2017/01/13 Javascript
基于JS代码实现简单易用的倒计时 x 天 x 时 x 分 x 秒效果
2017/07/13 Javascript
JS原生数据双向绑定实现代码
2017/08/14 Javascript
javascript标准库(js的标准内置对象)总结
2018/05/26 Javascript
2种在vue项目中使用百度地图的简单方法
2018/09/28 Javascript
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
详解key在Vue列表渲染时究竟起到了什么作用
2019/04/20 Javascript
vue中使用 pako.js 解密 gzip加密字符串的方法
2019/06/10 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
Python生成验证码实例
2014/08/21 Python
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
2015/03/31 Python
Python用Pillow(PIL)进行简单的图像操作方法
2017/07/07 Python
简述Python2与Python3的不同点
2018/01/21 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
2018/04/21 Python
Python + Requests + Unittest接口自动化测试实例分析
2019/12/12 Python
Python 调用有道翻译接口实现翻译
2020/03/02 Python
django之导入并执行自定义的函数模块图解
2020/04/01 Python
让IE6、IE7、IE8支持CSS3的脚本
2010/07/20 HTML / CSS
canvas之自定义头像功能实现代码示例
2017/09/29 HTML / CSS
HTML5开发动态音频图的实现
2020/07/02 HTML / CSS
Skyscanner台湾:全球知名的旅行比价引擎
2018/07/01 全球购物
护理实习自我鉴定
2013/12/14 职场文书
2014年社团工作总结范文
2014/11/27 职场文书
解决python绘图使用subplots出现标题重叠的问题
2021/04/30 Python
Pandas-DataFrame知识点汇总
2022/03/16 Python