详解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 相关文章推荐
javascript 装载iframe子页面,自适应高度
Mar 20 Javascript
Javascript的构造函数和constructor属性
Jan 09 Javascript
js判断变量初始化的三种形式及推荐用的形式
Jul 22 Javascript
JavaScript的各种常见函数定义方法
Sep 16 Javascript
一个JavaScript防止表单重复提交的实例
Oct 21 Javascript
AngularJS实现一次监听多个值发生的变化
Aug 31 Javascript
PHP获取当前页面完整URL的方法
Dec 02 Javascript
vue自定义全局组件(自定义插件)的用法
Jan 30 Javascript
JQuery元素快速查找与操作
Apr 22 jQuery
layui 关闭open弹出框 刷新table表格页面的方法
Sep 16 Javascript
vue图片上传组件使用详解
Dec 23 Javascript
浅谈JSON5解决了JSON的两大痛点
Dec 14 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生成随机密码的几种方法
2011/01/17 PHP
php调用KyotoTycoon简单实例
2015/04/02 PHP
js 页面元素的几个用法总结
2013/11/18 Javascript
纯js和css实现渐变色包括静态渐变和动态渐变
2014/05/29 Javascript
javascript事件冒泡实例分析
2015/05/13 Javascript
js+css实现文字散开重组动画特效代码分享
2015/08/21 Javascript
13个PHP函数超实用
2015/10/21 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
Bootstrap实现弹性搜索框
2016/07/11 Javascript
jquery.tableSort.js表格排序插件使用方法详解
2020/08/12 Javascript
微信小程序 定位到当前城市实现实例代码
2017/02/23 Javascript
基于JavaScript实现的快速排序算法分析
2017/04/14 Javascript
CryptoJS中AES实现前后端通用加解密技术
2018/12/18 Javascript
Vue开发Html5微信公众号的步骤
2019/04/11 Javascript
JavaScript实现文件下载并重命名代码实例
2019/12/12 Javascript
JS函数基本定义与用法示例
2020/01/15 Javascript
python下载文件时显示下载进度的方法
2015/04/02 Python
简析Python的闭包和装饰器
2016/02/26 Python
python中PIL安装简单教程
2016/04/21 Python
Python使用遗传算法解决最大流问题
2018/01/29 Python
python微信跳一跳系列之色块轮廓定位棋盘
2018/02/26 Python
python 的 scapy库,实现网卡收发包的例子
2019/07/23 Python
python Django里CSRF 对应策略详解
2019/08/05 Python
Python log模块logging记录打印用法解析
2020/01/20 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
2020/04/23 Python
使用Python3 poplib模块删除服务器多天前的邮件实现代码
2020/04/24 Python
Python实现Canny及Hough算法代码实例解析
2020/08/06 Python
印度领先的在线时尚商店:Koovs
2016/08/28 全球购物
介绍一下Make? 为什么使用make
2016/07/31 面试题
出国留学计划书
2014/04/27 职场文书
公司联欢会策划方案
2014/05/19 职场文书
三分钟自我介绍演讲稿
2014/08/21 职场文书
承诺书范本
2015/01/21 职场文书
2015年客房服务员工作总结
2015/05/15 职场文书
优质服务标语口号
2015/12/26 职场文书
军训心得体会范文(2016最新篇)
2016/01/11 职场文书