其实是一种利用符号进行的类型转换,转换成数字类型

~~true == 1
~~false == 0
~~"" == 0
~~[] == 0

~~undefined ==0
~~!undefined == 1
~~null == 0
~~!null == 1

按位非运算符,简单的理解就是改变运算数的符号并减去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; 

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

  1. js中三个判断的应用——if else、三元运算符、switch case

    js中三个判断的应用--if else.三元运算符.switch case 区别 if .else if.else 是最常用的判断,可以解决js中的所有的判断需求 三元运算符应用于简单的if else ...

  2. node.js中模块_在Node.js中需要模块:您需要知道的一切

    node.js中模块 by Samer Buna 通过Samer Buna 在Node.js中需要模块:您需要知道的一切 (Requiring modules in Node.js: Everythi ...

  3. js中“||”和“”的高级用法 js,与或运算符 || 妙用

    网络上找到的一篇关于逻辑与和逻辑或的文章,详细记录一下. http://www.jb51.net/article/21339.htm 例1:用于赋值 &&:从左往右依次判断,当当前值为 ...

  4. three.js中坐标系转换以及camera的position、lookAt与up属性理解

    为了更好的理解camera的position.lookAt与up属性,文章最开始我们先来阐述three.js的坐标系转换的概念. 1.监听event的事件获得屏幕坐标 文章的最开始首先讨论在哪里进行点 ...

  5. js 中 java 代码_在js中嵌套java代码

    jsp中有时候在js中操作某些java后台传递过来的数据逻辑比较复杂,比如list内容的遍历,可以直接在页面上添加java脚本来执行内容,代码如下: //在js中插入java代码操作 //取出java ...

  6. 后端响应的字符串“true”,在JS中不等于“true”?JS中if(“true“ == “true“),结果为false?

    答案:JS中if("true" == "true") 结果当然为true.只是因为响应的数据最后带有回车"\n",if("true ...

  7. Js读取Cookie中指定字段的值,Js中读取某个Cookie,Js中根据Cookie的key得到对应的value,Js正则表达式匹配指定的Cookie

    Js中想要读取Cookie中指定字段的值,可以遍历Cookie根据指定Key提取Cookie,或者使用正则表达式匹配Cookie,代码如下: /*** @description: 遍历cookie得到 ...

  8. js 中添加php数组元素,JS数组添加元素方法总结

    本篇文章介绍了如何向JS数组中添加新的元素,分别使用不同的几种方法去给JS数组添加元素,数组在JS中是很常用的数据类型之一,而对数组进行操作这是我们必会的基础之一. 下面我们来看一下有哪些方法可以对J ...

  9. JS中闭包的应用自定义JS模块2

    /*** 自定义模块2*/ (function (window) {//私有的数据var msg = 'atguigu'var names = ['I', 'Love', 'you']//操作数据的函 ...

最新文章

  1. 牛客练习赛9 B - 珂朵莉的值域连续段
  2. ES6新特性之class类的基本语法
  3. 『Python基础-12』各种推导式(列表推导式、字典推导式、集合推导式)
  4. 《剑指offer》-整数中1出现的次数
  5. ORACLE中表死锁的处理
  6. nonlocal python3_Python 中的 global、nonlocal 辨析
  7. linux脚本ipddr.sh 是什么,MTK DDR调试
  8. java中什么是匿名接口_Java中接口(interface)和匿名类
  9. JSP+JavaBean+Servlet+Oracle新增功能中对Date类型的字段的处理
  10. php 三大魔术方法,PHP魔术方法
  11. python sort sorted_Python sort和sorted
  12. Shiro在线刷新权限
  13. Altium Designer 入门及环境配置
  14. 回车enter键的js
  15. 【PPT 资源下载】甲骨文数据库大会精彩主题分享
  16. Shell - timeout命令
  17. html制作象棋教程入门教程,photoshop图层样式制作象棋棋子教程
  18. 安卓开发记账本app
  19. 2019初三计算机考试模拟,初三学生特别关注:2019年中考模拟试卷正式发布!五月份练起来...
  20. HMI-45-【控制台】控制台代码迁移

热门文章

  1. 炸裂!前浪老狗工作这5年遇到的面试题们,建议老铁们收藏研读
  2. 开源硕士毕业论文算法
  3. Keil MDK中编译连接选项--keep的用法
  4. vue中的keep-alive的用法详细讲解
  5. c++写一个函数验证哥德巴赫猜想
  6. c语言第三章程序设计实训
  7. 著名的斐波那契额数列,1 1 2 3 5 8输出第n项
  8. P2178 后缀数组 + 并查集
  9. 在 Windows 系统下常用的 bat 脚本分享
  10. mysql查询结果赋予变量_MySQL设置会话变量:把查询结果赋值给变量