详解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操作XML实例代码(获取新闻标题并分页,并分页)
May 25 Javascript
ExtJs GridPanel简单的增删改实现代码
Aug 26 Javascript
jQuery EasyUi 验证功能实例解析
Jan 06 Javascript
Mongoose学习全面理解(推荐)
Jan 21 Javascript
Avalonjs 实现简单购物车功能(实例代码)
Feb 07 Javascript
vue实现单选和多选功能
Aug 11 Javascript
浅谈Node模块系统及其模式
Nov 17 Javascript
浅谈Angular 的变化检测的方法
Mar 01 Javascript
layui动态渲染生成select的option值方法
Sep 23 Javascript
Node.js API详解之 assert模块用法实例分析
May 26 Javascript
为什么推荐使用JSX开发Vue3
Dec 28 Vue.js
教你一步步实现一个简易promise
Nov 02 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实现多级树型菜单
2006/10/09 PHP
Smarty安装配置方法
2008/04/10 PHP
基于Zookeeper的使用详解
2013/05/02 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
PHP 读取大文件并显示的简单实例(推荐)
2016/08/12 PHP
使用户点击后退按钮使效三行代码
2007/07/07 Javascript
js正确获取元素样式详解
2009/08/07 Javascript
理解Javascript_10_对象模型
2010/10/16 Javascript
jQuery使用之标记元素属性用法实例
2015/01/19 Javascript
javascript修改图片src的方法
2015/01/27 Javascript
javascript实现下班倒计时效果的方法(可桌面通知)
2015/07/10 Javascript
javascript自动恢复文本框点击清除后的默认文本
2016/01/12 Javascript
浅析JavaScript中浏览器的兼容问题
2016/04/19 Javascript
简介BootStrap model弹出框的使用
2016/04/27 Javascript
jQuery中的通配符选择器使用总结
2016/05/30 Javascript
解决bootstrap导航栏navbar在IE8上存在缺陷的方法
2016/07/01 Javascript
Express + Session 实现登录验证功能
2017/09/08 Javascript
Angular实现表单验证功能
2017/11/13 Javascript
浅谈vue-router 路由传参的方法
2017/12/27 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
2019/10/30 Javascript
[01:10]DOTA2次级职业联赛 - EP战队宣传片
2014/12/01 DOTA
简介Python中用于处理字符串的center()方法
2015/05/18 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
2016/12/27 Python
Django 导出 Excel 代码的实例详解
2017/08/11 Python
python中requests库session对象的妙用详解
2017/10/30 Python
python查找重复图片并删除(图片去重)
2019/07/16 Python
在Python中os.fork()产生子进程的例子
2019/08/08 Python
关于windows下Tensorflow和pytorch安装教程
2020/02/04 Python
自我鉴定范文200字
2013/10/02 职场文书
自我鉴定怎么写
2014/01/12 职场文书
建设单位项目负责人任命书
2014/06/06 职场文书
运动会广播稿诗歌版
2014/09/12 职场文书
普通党员对照检查材料
2014/09/24 职场文书
2014年高数考试作弊检讨书
2014/12/14 职场文书
结婚保证书(卖身契)
2015/02/26 职场文书
python利用while求100内的整数和方式
2021/11/07 Python