按位非运算符,简单的理解就是改变运算数的符号并减去1,当然,这是只是简单的理解能转换成number类型的数据;那么,对于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;

同样采用上下舍入的方式来理解;

转载于:https://www.cnblogs.com/zorroLiu/archive/2011/07/29/2120924.html

JS按位非(~)运算符与~~运算符的理解相关推荐

  1. js中得~~是什么意思/JS按位非(~)运算符与~~运算符的理解分析

    其实是一种利用符号进行的类型转换,转换成数字类型 ~~true == 1 ~~false == 0 ~~"" == 0 ~~[] == 0 ~~undefined ==0 ~~!u ...

  2. JS五种运算符,运算符的优先级

    JS的运算符一共包括五种,下面我们来一个个的解说一下,开工~ 1.赋值运算符 符号:= 解释:这里的等号不是数学里面的相等,是赋值.在应用时,需要先把等号右边的表达式算出来结果,再赋值给左边. var ...

  3. 关于java中位运算符的使用和理解

    关于java中位运算符的使用和理解 &(按位与) ' & ' 符号的作用是对运算符的两侧以二进制表达的操作符按位进行'与'运算. 规则: 只有两个操作数对应位同为1时,结果为1,其余全 ...

  4. c语言加法结合性,C语言 运算符 的结合性 怎么理解?求举例子详细解答!!

    C语言 运算符 的结合性 怎么理解?求举例子详细解答!! 关注:284  答案:5  信息版本:手机版 解决时间 2019-01-11 21:03 战魂 2019-01-11 10:01 C语言 运算 ...

  5. 前端:JS/19/特殊运算符,运算符优先级,if条件判断语句,switch分支语句,while循环语句,for循环语句,break和continue循环控制语句,实例:九九乘法表

    特殊运算符 new运算符:创建一个对象.如:var today=new Date(); delete运算符:删除数组的元素,或者对象的属性: typeof运算符:一元运算符,主要功能:判断变量的类型的 ...

  6. 温故js系列(4)-运算符详解

    前端学习:教程&开发模块化/规范化/工程化/优化&工具/调试&值得关注的博客/Git&面试-前端资源汇总 欢迎提issues斧正:运算符 JavaScript-运算符 ...

  7. JS运算符—算术运算符、逻辑运算符、赋值运算符、关系运算符、条件运算符

    文章目录 1.运算符基本概念 2.算术运算符 2.1 加号 2.2减号 2.3乘号 2.4除号 2.5取余(求余数) 三.一元运算符 四.自增自减 五.逻辑运算符 5.1 ! 非运算(可以进行其他数据 ...

  8. js技巧之与或运算符 || 妙用

    如题: 假设对成长速度显示规定如下: 成长速度为5显示1个箭头:  成长速度为10显示2个箭头:  成长速度为12显示3个箭头:  成长速度为15显示4个箭头:  其他都显示都显示0各箭头.  用代码 ...

  9. js 中的单目运算符,双目运算符与三目运算符区别

    单目运算符 :运算符只对一个变量进行操作. 双目运算符 :对两个变量进行操作. 三目运算符:运算符对三个变量进行操作. 这里记录一下.

最新文章

  1. [windows server 2008 站点系列五]一招加速域用戶的文件查找速度
  2. Windows下Oracle 11g创建数据库
  3. 63. Unique Paths II
  4. CVPR 2020 《Where Does It Exist: Spatio-Temporal Video Grounding for Multi-Form Sentences》论文笔记
  5. css div 垂直居中设置
  6. C++实现skip list跳表(附完整源码)
  7. php格式化金额函数分享
  8. netcat、ncc工具使用
  9. 1163 最高的奖励(贪心+优先队列)
  10. linux修改vcf编码格式,VCF乱码终极解决大法
  11. MP3比特率编码模式
  12. SpringCloud (五) ——Feign远程调用
  13. The retrospective material for unit_4 Survival
  14. 智力题解题报告No.12 倒油 倒酒 倒水问题
  15. 纺织企业举步维艰,小微纺织企业该如何做?
  16. Chomsky文法分类
  17. userdel删除用户时候提示:userdel: user xx is currently logged in
  18. left join on多条件深度理解
  19. wince5.0模拟器连接ActiveSync和共享网络PC分享上网及运行BS程序(模拟手持设备)
  20. Git Bash中出现:error: failed to push some refs to ‘https://gitee.com/xxx/xxx.git‘错误的解决方法

热门文章

  1. 82个加密数字货币遭交易所下线,全球区块链ICO代币进入强监管
  2. python逻辑回归训练预测_[Python] 机器学习笔记 基于逻辑回归的分类预测
  3. 硬盘 SMART 检测参数详解
  4. Linux基本的键盘输入快捷键和一些常用命令
  5. 学习编程,应该从哪里开始学习呢?
  6. 【Java知识体系】Redis实用教程,深入原理
  7. java 域账户登录失败_域用户登陆,错误:无法登录到你的账户,通常可以通过从你的账户注销,然后重新登录来解决此问题...
  8. 域账号加到本机管理员组和本机Power Users组
  9. win10 锁屏时间无法设置 解决方法
  10. Android调用QQ加群代码