按位非

按位非操作符由一个波浪线(~)表示,执行按位非的结果就是返回数值的反码

现在让我来看几个例子

例子1

console.log(4);
console.log(~4);
console.log(~~4);

例子2

console.log(4.9.toString(2));
console.log(~4.9);
console.log(~~4.9);

例子3

console.log(-4.1.toString(2));
console.log(~-4.1);
console.log(~~-4.1);

结论

通过上面的例子我们可以知道对于整数,按位非就是操作数的负值减1.

但是对于浮点数就比较麻烦了,操作浮点数时,会直接舍去小数部分,再取负值减1

利用这点我们可以可以使用~~来代替Math.floor();

比如我们经常求一个数组的中点,就可以直接~~(arr.length/2),是不是比Math.floor()来的更方便呢?

此外|0操作也可以达到和~~类似的效果,例如(arr.length/2)|0

再补充个小知识:

console.log(~~NaN);//
console.log(NaN|0);//

JS中的按位非(~)的使用技巧的更多相关文章

  1. js-分享107个js中的非常实用的小技巧(借鉴保存)

    转载原文:http://***/Show.aspx?id=285 1.document.write(""); 输出语句 2.JS中的注释为// 3.传统的HTML文档顺序是:doc ...

  2. 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获

    项目开发中的一些注意事项以及技巧总结   1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...

  3. C#中??和?分别是什么意思? 在ASP.NET开发中一些单词的标准缩写 C#SESSION丢失问题的解决办法 在C#中INTERFACE与ABSTRACT CLASS的区别 SQL命令语句小技巧 JQUERY判断CHECKBOX是否选中三种方法 JS中!=、==、!==、===的用法和区别 在对象比较中,对象相等和对象一致分别指的是什么?

    C#中??和?分别是什么意思? 在C#中??和?分别是什么意思? 1. 可空类型修饰符(?):引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空.例如:string str=null; ...

  4. 处理 JS中 undefined 的 7 个技巧

    摘要: JS的大部分报错都是undefined... 作者:前端小智 原文:处理 JS中 undefined 的 7 个技巧 Fundebug经授权转载,版权归原作者所有. 大约8年前,当原作者开始学 ...

  5. Javascript开发技巧(JS中的变量、运算符、分支结构、循环结构)

    一.Js简介和入门 继续跟进JS开发的相关教程. <!-- [使用JS的三种方式] 1.HTML标签中内嵌JS(不提倡使用): 示例:<button onclick="javas ...

  6. (网页)JS中的小技巧,但十分的实用!

    转自CSDN: 1.document.write(”"); 输出语句2.JS中的注释为//3.传统的HTML文档顺序是:document->html->(head,body)4. ...

  7. 分享一个在js中判断数据是undefined,NaN,null,的技巧

    教大家如何在js中判断一个值是否是undefined,null,NaN,以及如何单独判断 平常开发过程中大家可能遇到一种问题,就是取页面某个值的时候获取不到这个var就是undefined了,如果是数 ...

  8. js中this关键字测试集锦

    参考:阮一峰<javascript的this用法>及<JS中this关键字详解> this是Javascript语言的一个关键字它代表函数运行时,自动生成的一个内部对象,只能在 ...

  9. 客户端JS性能的一些优化的小技巧

    下面是一些关于客户端JS性能的一些优化的小技巧:1.[顶]关于JS的循环,循环是一种常用的流程控制.JS提供了三种循环:for(;;). while().for(in).在这三种循环中 for(in) ...

随机推荐

  1. idea启动tomcat后访问项目报java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet

    一.报错“java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet” 1.File --- ...

  2. go语言编程入门

    查看文档 首先先分享一个可以在本地就能查看文档的骚操作(linux系统) 1.打开命令行终端,输入godoc -http=:8000,如果想后台运行在后面加个& 2.然后打开浏览器,输入网址: ...

  3. 【linux set命令】shell bash 打印执行的命令

    在文件开头加上 set -x 可以打印执行的命令,可以用于调试 set 命令使用方法 https://www.jianshu.com/p/ea406382be3e

  4. BZOJ5056 OI游戏 最短路+组合数学

    链接接接接接! 正解:最短路+小学奥数 乘法原理 解题报告: 首先读懂题意(,,,我觉得我吃枣死于语文太差读不懂题目QAQ 大意就是港,要求从第一个点到其他各点的长度都是最短的方案有多少个(ummm, ...

  5. getContextPath、getServletPath、getRequestURI、request.getRealPath的区别

    1 区别 假定你的web application 名称为news,你在浏览器中输入请求路径: http://localhost:8080/news/main/list.jsp 1.1 System.o ...

  6. appstore加速审核通道

    申请入口:https://developer.apple.com/contact/app-store/?topic=expedite

  7. MySQL · 功能分析 · 5.6 并行复制实现分析

    背景 我们知道MySQL的主备同步是通过binlog在备库重放进行的,IO线程把主库binlog拉过去存入relaylog,然后SQL线程重放 relaylog 中的event,然而这种模式有一个问题 ...

  8. Java-mybatis-一次执行多条SQL语句

    mysql数据库 1.修改数据库连接参数加上allowMultiQueries=true,如: hikariConfig.security.jdbcUrl=jdbc:mysql://xx.xx.xx: ...

  9. vuex使用

    1.装包:npm install vuex -S 2.引入:import Vuex from 'vuex'      //这些都是写在man.js中 3.加载到Vue中:Vue.use(Vuex) 4 ...

  10. CMSPRESS-PHP无限级分类

    原博文地址:http://blog.sina.com.cn/s/blog_75ad10100101mrv0.html 当你学习php无限极分类的时候,大家都觉得一个字“难”我也觉得很难,所以,现在都还 ...