详解js运算符单竖杠“|”与“||”的用法和作用介绍


Posted in Javascript onNovember 04, 2016

在js开发应用中我们通常会碰到“|”与“||”了,那么在运算中“|”与“||”是什么意思呢?

在js整数操作的时候,相当于去除小数点,parseInt。在正数的时候相当于Math.floor(),负数的时候相当于Math.ceil() 注:

1. Math.ceil()用作向上取整。
2. Math.floor()用作向下取整。
3. Math.round() 我们数学中常用到的四舍五入取整。

console.log(0.6|0)//0
console.log(1.1|0)//1
console.log(3.65555|0)//3
console.log(5.99999|0)//5
console.log(-7.777|0)//-7

单竖杠的运算规则

看了上面的例子,大体知道单竖杠可以进行取整运算,就是只保留正数部分,小数部分通过拿掉,但是“|0”,又是如何进行运算的呢,为什么能“|0”能达到取整的目的呢?单竖杠不是0有会是多少呢?

带着这些问题,我们看下面例子:

console.log(3|4); //7
console.log(4|4);//4
console.log(8|3);//11
console.log(5.3|4.1);//5
console.log(9|3455);//3455

这里面提到了单竖杠“|”但是没有javascript的。

好吧,我在这里公布答案吧。其实单竖杠“|”就是转换为2进制之后相加得到的结果。例如我们拿简单的举例:

3|4

转换为二进制之后011|100  相加得到111=7

4|4

转换为二进制之后100 |100  相加得到100=4

8|3

转换为二进制之后1000 |011  相加得到1011=11

以此类推,我在这里就不一一列举了,单竖杠“|”运算就是转换为2进制之后相加得到的结果!

JS 双竖线运算符

1、JS双竖线运算符:是或比较.如null||'1',返回'1';'2'||'1',返回'2'.即或运算符中,第一个为真,后面的就不用计算了.所以得'2'。

2、js 中 使用双竖线运算符"||",返回第一个有效值

var objOne = undefined || 1 || null || new Date(); 
var objTwo = new Date(); 
var objThree = objOne || objTwo; 
alert(objThree.toString()); //out put "1"

总结

性能上的比较

逻辑运算符&& || 中,如果&&的第一个运算数是false,就不再考虑第二个运算数,直接返回false;如果||的第一个运算数是true,也不再考虑第二个运算数,直接返回true。而&和|运算符却不是这样的,它们总是要比较两个运算数才得出结果,因而性能上&&和||会比&和|好。

功能用法

&&和||只能进行逻辑运算,而&和|除了可以进行"逻辑运算"外,还可以进行位运算

位运算

&和|本是位运算符,之所以可以进行"逻辑运算",是由于JS是无类型的语言、各数据类型可以自由转换这一特性决定的,当用&和|进行"逻辑运算"时,实际上true被转换成1,false被转换成0,再进行逐位运算:

document.write(true & false); //JS,结果为0

上面这句,实例等同于逻辑运算被转化成下面的位运算,并执行:

document.write(1 & 0); //JS,结果为0

也正是由于&和|是逐位运算符,才出现了第一点中所说的,它们总是要比较两个运算数才得出结果,才导致性能会比&&和||低一些。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery 1.3.2 IE8中的一点点的小问题解决方法
Jul 10 Javascript
js 变量类型转换常用函数与代码[比较全]
Dec 01 Javascript
js parseInt("08")未指定进位制问题
Jun 19 Javascript
纯js实现div内图片自适应大小(已测试,兼容火狐)
Jun 16 Javascript
在Ubuntu系统上安装Node.JS的教程
Oct 15 Javascript
图文详解Heap Sort堆排序算法及JavaScript的代码实现
May 04 Javascript
js制作支付倒计时页面
Oct 21 Javascript
Ajax实现不刷新取最新商品
Mar 01 Javascript
Vue获取DOM元素样式和样式更改示例
Mar 07 Javascript
浅谈react-native热更新react-native-pushy集成遇到的问题
Sep 30 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
Mar 12 Javascript
微信小程序实现电子签名并导出图片
May 27 Javascript
使用Ajax与服务器(JSON)通信实例
Nov 04 #Javascript
AngularJS过滤器filter用法实例分析
Nov 04 #Javascript
URL的参数中有加号传值变为空格的问题(URL特殊字符)
Nov 04 #Javascript
Angular页面间切换及传值的4种方法
Nov 04 #Javascript
AngularJS实现根据变量改变动态加载模板的方法
Nov 04 #Javascript
RGB和YUV 多媒体编程基础详细介绍
Nov 04 #Javascript
javascript设置文本框光标的方法实例小结
Nov 04 #Javascript
You might like
PHP实现的curl批量请求操作示例
2018/06/06 PHP
jQuery EasyUI 的EasyLoader功能介绍
2010/09/12 Javascript
基于Jquery+Ajax+Json的高效分页实现代码
2011/10/29 Javascript
js遍历、动态的添加数据的小例子
2013/06/22 Javascript
Jquery显示、隐藏元素以及添加删除样式
2013/08/09 Javascript
JQuery中上下文选择器实现方法
2015/05/18 Javascript
jQuery实现非常实用漂亮的select下拉菜单选择效果
2015/11/06 Javascript
在Vue中使用highCharts绘制3d饼图的方法
2018/02/08 Javascript
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
Javascript迭代、递推、穷举、递归常用算法实例讲解
2019/02/01 Javascript
vue项目中在可编辑div光标位置插入内容的实现代码
2020/01/07 Javascript
JavaScript实现简单计算器
2020/03/19 Javascript
vue data变量相互赋值后被实时同步的解决步骤
2020/08/05 Javascript
[50:05]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
python绘图库Matplotlib的安装
2014/07/03 Python
详解Django中Request对象的相关用法
2015/07/17 Python
Python 删除整个文本中的空格,并实现按行显示
2018/07/24 Python
Python判断telnet通不通的实例
2019/01/26 Python
Python实现程序判断季节的代码示例
2019/01/28 Python
pytorch 自定义数据集加载方法
2019/08/18 Python
python字符串格式化方式解析
2019/10/19 Python
Python是怎样处理json模块的
2020/07/16 Python
Notino意大利:购买香水和化妆品
2018/11/14 全球购物
职业生涯规划怎么写
2013/12/29 职场文书
技能竞赛活动方案
2014/02/21 职场文书
《画杨桃》教学反思
2014/04/13 职场文书
让生命充满爱演讲稿
2014/05/10 职场文书
公司委托书怎么写
2014/08/02 职场文书
党员教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
2015年高校图书馆工作总结
2015/04/30 职场文书
民事二审代理词
2015/05/25 职场文书
pytorch 权重weight 与 梯度grad 可视化操作
2021/06/05 Python
详解nginx安装过程并代理下载服务器文件
2022/02/12 Servers
Java虚拟机内存结构及编码实战分享
2022/04/07 Java/Android
python三子棋游戏
2022/05/04 Python
mysql通过group by分组取最大时间对应数据的两种有效方法
2022/09/23 MySQL